as_str() -> as_native_str()

This commit is contained in:
Damien Elmes 2021-04-18 09:33:39 +10:00
parent 1acc679e8f
commit e71f7714ad
8 changed files with 30 additions and 22 deletions

View file

@ -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"
);

View file

@ -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)?;

View file

@ -150,7 +150,7 @@ impl Collection {
pub fn get_or_create_normal_deck(&mut self, human_name: &str) -> Result<Deck> {
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<Option<DeckId>> {
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")?;

View file

@ -8,10 +8,7 @@ use std::borrow::Cow;
pub struct NativeDeckName(String);
impl NativeDeckName {
pub fn from_native_str<N: Into<String>>(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<N: Into<String>>(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,
_ => (),

View file

@ -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
}

View file

@ -39,7 +39,7 @@ pub(super) fn remaining_limits_capped_to_parents(
today: u32,
) -> Vec<RemainingLimits> {
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
}

View file

@ -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()
};

View file

@ -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;