From e71f7714ad0838644511b33b158da56f0fbfaad4 Mon Sep 17 00:00:00 2001 From: Damien Elmes Date: Sun, 18 Apr 2021 09:33:39 +1000 Subject: [PATCH] as_str() -> as_native_str() --- rslib/src/dbcheck.rs | 6 +++++- rslib/src/decks/add.rs | 4 ++-- rslib/src/decks/mod.rs | 6 +++--- rslib/src/decks/name.rs | 18 +++++++++++------- rslib/src/decks/tree.rs | 2 +- rslib/src/scheduler/queue/limits.rs | 2 +- rslib/src/search/sqlwriter.rs | 4 ++-- rslib/src/storage/deck/mod.rs | 10 +++++----- 8 files changed, 30 insertions(+), 22 deletions(-) diff --git a/rslib/src/dbcheck.rs b/rslib/src/dbcheck.rs index 5f99075b3..39be2868b 100644 --- a/rslib/src/dbcheck.rs +++ b/rslib/src/dbcheck.rs @@ -430,7 +430,11 @@ mod test { } ); assert_eq!( - col.storage.get_deck(DeckId(123))?.unwrap().name.as_str(), + col.storage + .get_deck(DeckId(123))? + .unwrap() + .name + .as_native_str(), "recovered123" ); diff --git a/rslib/src/decks/add.rs b/rslib/src/decks/add.rs index 6047046f1..452050efb 100644 --- a/rslib/src/decks/add.rs +++ b/rslib/src/decks/add.rs @@ -105,7 +105,7 @@ impl Collection { /// Returns an error if a DB operation fails, or if the first existing parent is a filtered deck. fn match_or_create_parents(&mut self, deck: &mut Deck, usn: Usn) -> Result<()> { let child_split: Vec<_> = deck.name.components().collect(); - if let Some(parent_deck) = self.first_existing_parent(deck.name.as_str(), 0)? { + if let Some(parent_deck) = self.first_existing_parent(deck.name.as_native_str(), 0)? { if parent_deck.is_filtered() { return Err(FilteredDeckError::MustBeLeafNode.into()); } @@ -130,7 +130,7 @@ impl Collection { } fn create_missing_parents(&mut self, name: &NativeDeckName, usn: Usn) -> Result<()> { - let mut machine_name = name.as_str(); + let mut machine_name = name.as_native_str(); while let Some(parent_name) = immediate_parent_name(machine_name) { if self.storage.get_deck_id(parent_name)?.is_none() { self.add_parent_deck(parent_name, usn)?; diff --git a/rslib/src/decks/mod.rs b/rslib/src/decks/mod.rs index f47cd3ca7..384041a22 100644 --- a/rslib/src/decks/mod.rs +++ b/rslib/src/decks/mod.rs @@ -150,7 +150,7 @@ impl Collection { pub fn get_or_create_normal_deck(&mut self, human_name: &str) -> Result { let name = NativeDeckName::from_human_name(human_name); - if let Some(did) = self.storage.get_deck_id(name.as_str())? { + if let Some(did) = self.storage.get_deck_id(name.as_native_str())? { self.storage.get_deck(did).map(|opt| opt.unwrap()) } else { let mut deck = Deck::new_normal(); @@ -164,7 +164,7 @@ impl Collection { /// use the method in storage instead. pub(crate) fn get_deck_id(&self, human_name: &str) -> Result> { self.storage - .get_deck_id(NativeDeckName::from_human_name(human_name).as_str()) + .get_deck_id(NativeDeckName::from_human_name(human_name).as_native_str()) } } @@ -248,7 +248,7 @@ mod test { // should handle name conflicts middle.name = NativeDeckName::from_native_str("other"); col.add_or_update_deck(&mut middle)?; - assert_eq!(middle.name.as_str(), "other+"); + assert_eq!(middle.name.as_native_str(), "other+"); // public function takes human name col.rename_deck(middle.id, "one::two")?; diff --git a/rslib/src/decks/name.rs b/rslib/src/decks/name.rs index 41a05cbf0..9d6f3ac1a 100644 --- a/rslib/src/decks/name.rs +++ b/rslib/src/decks/name.rs @@ -8,10 +8,7 @@ use std::borrow::Cow; pub struct NativeDeckName(String); impl NativeDeckName { - pub fn from_native_str>(name: N) -> Self { - NativeDeckName(name.into()) - } - + /// Create from a '::'-separated string pub fn from_human_name(name: &str) -> Self { NativeDeckName( name.split("::") @@ -20,6 +17,7 @@ impl NativeDeckName { ) } + /// Return a '::'-separated string. pub fn human_name(&self) -> String { self.0.replace('\x1f', "::") } @@ -28,7 +26,13 @@ impl NativeDeckName { self.0 += suffix } - pub(crate) fn as_str(&self) -> &str { + /// Create from an '\x1f'-separated string + pub(crate) fn from_native_str>(name: N) -> Self { + NativeDeckName(name.into()) + } + + /// Return a reference to the inner '\x1f'-separated string. + pub(crate) fn as_native_str(&self) -> &str { &self.0 } @@ -58,7 +62,7 @@ impl NativeDeckName { /// Replace the old parent's name with the new parent's name in self's name, where the old /// parent's name is expected to be a prefix. fn reparent(&mut self, old_parent: &NativeDeckName, new_parent: &NativeDeckName) { - self.0 = std::iter::once(new_parent.as_str()) + self.0 = std::iter::once(new_parent.as_native_str()) .chain(self.components().skip(old_parent.components().count())) .join("\x1f") } @@ -117,7 +121,7 @@ impl Collection { pub(crate) fn ensure_deck_name_unique(&self, deck: &mut Deck, usn: Usn) -> Result<()> { loop { - match self.storage.get_deck_id(deck.name.as_str())? { + match self.storage.get_deck_id(deck.name.as_native_str())? { Some(did) if did == deck.id => break, None => break, _ => (), diff --git a/rslib/src/decks/tree.rs b/rslib/src/decks/tree.rs index 4c580819c..0e5d8b939 100644 --- a/rslib/src/decks/tree.rs +++ b/rslib/src/decks/tree.rs @@ -267,7 +267,7 @@ impl Collection { if let Some(now) = now { let limit = top_deck_id.and_then(|did| { if let Some(deck) = decks_map.get(&did) { - Some(deck.name.as_str()) + Some(deck.name.as_native_str()) } else { None } diff --git a/rslib/src/scheduler/queue/limits.rs b/rslib/src/scheduler/queue/limits.rs index f5252e36c..d80322517 100644 --- a/rslib/src/scheduler/queue/limits.rs +++ b/rslib/src/scheduler/queue/limits.rs @@ -39,7 +39,7 @@ pub(super) fn remaining_limits_capped_to_parents( today: u32, ) -> Vec { let mut limits = get_remaining_limits(decks, config, today); - cap_limits_to_parents(decks.iter().map(|d| d.name.as_str()), &mut limits); + cap_limits_to_parents(decks.iter().map(|d| d.name.as_native_str()), &mut limits); limits } diff --git a/rslib/src/search/sqlwriter.rs b/rslib/src/search/sqlwriter.rs index 10a5082fa..793b504aa 100644 --- a/rslib/src/search/sqlwriter.rs +++ b/rslib/src/search/sqlwriter.rs @@ -347,11 +347,11 @@ impl SqlWriter<'_> { .get_deck(current_did)? .map(|d| d.name) .unwrap_or_else(|| NativeDeckName::from_native_str("Default")) - .as_str(), + .as_native_str(), ) } else { NativeDeckName::from_human_name(&to_re(deck)) - .as_str() + .as_native_str() .to_string() }; diff --git a/rslib/src/storage/deck/mod.rs b/rslib/src/storage/deck/mod.rs index b0f34c5ee..ee3779bc7 100644 --- a/rslib/src/storage/deck/mod.rs +++ b/rslib/src/storage/deck/mod.rs @@ -124,7 +124,7 @@ impl SqliteStorage { let mut kind = vec![]; kind_enum.encode(&mut kind)?; let count = stmt.execute(params![ - deck.name.as_str(), + deck.name.as_native_str(), deck.mtime_secs, deck.usn, common, @@ -159,7 +159,7 @@ impl SqliteStorage { kind_enum.encode(&mut kind)?; stmt.execute(params![ deck.id, - deck.name.as_str(), + deck.name.as_native_str(), deck.mtime_secs, deck.usn, common, @@ -234,7 +234,7 @@ impl SqliteStorage { .last() .map(|d| &d.name) .unwrap_or_else(|| &child.name) - .as_str(), + .as_native_str(), ) { if let Some(parent_did) = self.get_deck_id(parent_name)? { let parent = self.get_deck(parent_did)?.unwrap(); @@ -329,7 +329,7 @@ impl SqliteStorage { "create temporary table active_decks (id integer primary key not null);" ))?; - let top = current.name.as_str(); + let top = current.name.as_native_str(); let prefix_start = &format!("{}\x1f", top); let prefix_end = &format!("{}\x20", top); @@ -361,7 +361,7 @@ impl SqliteStorage { deck.set_modified(usn); } loop { - let name = UniCase::new(deck.name.as_str().to_string()); + let name = UniCase::new(deck.name.as_native_str().to_string()); if !names.contains(&name) { names.insert(name); break;