mirror of
https://github.com/ankitects/anki.git
synced 2025-09-25 01:06:35 -04:00
as_str() -> as_native_str()
This commit is contained in:
parent
1acc679e8f
commit
e71f7714ad
8 changed files with 30 additions and 22 deletions
|
@ -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"
|
||||
);
|
||||
|
||||
|
|
|
@ -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)?;
|
||||
|
|
|
@ -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")?;
|
||||
|
|
|
@ -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,
|
||||
_ => (),
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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()
|
||||
};
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue