aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Cargo.lock182
-rw-r--r--crates/cli/src/run.rs2
-rw-r--r--crates/cli/src/words.rs8
-rw-r--r--lib/mihi/Cargo.toml2
-rw-r--r--lib/mihi/src/lib.rs89
5 files changed, 196 insertions, 87 deletions
diff --git a/Cargo.lock b/Cargo.lock
index 49f27ad..a33bf5a 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -15,6 +15,12 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "812e12b5285cc515a9c72a5c1d3b6d46a19dac5acfef5265968c166106e31dd3"
[[package]]
+name = "bumpalo"
+version = "3.19.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "5dd9dc738b7a8311c7ade152424974d8115f2cdad61e8dab8dac9f2362298510"
+
+[[package]]
name = "byteorder"
version = "1.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -22,9 +28,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
[[package]]
name = "cc"
-version = "1.2.43"
+version = "1.2.52"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "739eb0f94557554b3ca9a86d2d37bebd49c5e6d0c1d2bda35ba5bdac830befc2"
+checksum = "cd4932aefd12402b36c60956a4fe0035421f544799057659ff86f923657aada3"
dependencies = [
"find-msvc-tools",
"shlex",
@@ -108,15 +114,15 @@ checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
[[package]]
name = "find-msvc-tools"
-version = "0.1.4"
+version = "0.1.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "52051878f80a721bb68ebfbc930e07b65ba72f2da88968ea5c06fd6ca3d3a127"
+checksum = "f449e6c6c08c865631d4890cfacf252b3d396c9bcc83adb6623cdb02a8336c41"
[[package]]
name = "foldhash"
-version = "0.1.5"
+version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d9c4f5dac5e15c24eb999c26181a6ca40b39fe946cbe4c263c7209467bc83af2"
+checksum = "77ce24cb58228fbb8aa041425bb1050850ac19177686ea6e0f41a70416f56fdb"
[[package]]
name = "fuzzy-matcher"
@@ -150,18 +156,18 @@ dependencies = [
[[package]]
name = "hashbrown"
-version = "0.15.5"
+version = "0.16.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1"
+checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100"
dependencies = [
"foldhash",
]
[[package]]
name = "hashlink"
-version = "0.10.0"
+version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7382cf6263419f2d8df38c55d7da83da5c18aef87fc7a7fc1fb1e344edfe14c1"
+checksum = "ea0b22561a9c04a7cb1a302c013e0259cd3b4bb619f145b32f72b8b4bcbed230"
dependencies = [
"hashbrown",
]
@@ -186,21 +192,31 @@ dependencies = [
[[package]]
name = "itoa"
-version = "1.0.15"
+version = "1.0.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
+checksum = "92ecc6618181def0457392ccd0ee51198e065e016d1d527a7ac1b6dc7c1f09d2"
+
+[[package]]
+name = "js-sys"
+version = "0.3.83"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "464a3709c7f55f1f721e5389aa6ea4e3bc6aba669353300af094b29ffbdde1d8"
+dependencies = [
+ "once_cell",
+ "wasm-bindgen",
+]
[[package]]
name = "libc"
-version = "0.2.177"
+version = "0.2.180"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2874a2af47a2325c2001a6e6fad9b16a53b802102b528163885171cf92b15976"
+checksum = "bcc35a38544a891a5f7c865aca548a982ccb3b8650a5b06d0fd33a10283c56fc"
[[package]]
name = "libsqlite3-sys"
-version = "0.33.0"
+version = "0.36.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "947e6816f7825b2b45027c2c32e7085da9934defa535de4a6a46b10a4d5257fa"
+checksum = "95b4103cffefa72eb8428cb6b47d6627161e51c2739fc5e3b734584157bc642a"
dependencies = [
"cc",
"pkg-config",
@@ -224,9 +240,9 @@ dependencies = [
[[package]]
name = "log"
-version = "0.4.28"
+version = "0.4.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "34080505efa8e45a4b816c349525ebe327ceaa8559756f0356cba97ef3bf7432"
+checksum = "5e5032e24019045c762d3c0f28f5b6b8bbf38563a65908389bf7978758920897"
[[package]]
name = "memchr"
@@ -301,18 +317,18 @@ checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
[[package]]
name = "proc-macro2"
-version = "1.0.103"
+version = "1.0.105"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ee95bc4ef87b8d5ba32e8b7714ccc834865276eab0aed5c9958d00ec45f49e8"
+checksum = "535d180e0ecab6268a3e718bb9fd44db66bbbc256257165fc699dadf70d16fe7"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
-version = "1.0.41"
+version = "1.0.43"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ce25767e7b499d1b604768e7cde645d14cc8584231ea6b295e9c9eb22c02e1d1"
+checksum = "dc74d9a594b72ae6656596548f56f667211f8a97b3d4c3d467150794690dc40a"
dependencies = [
"proc-macro2",
]
@@ -334,9 +350,9 @@ dependencies = [
[[package]]
name = "rusqlite"
-version = "0.35.0"
+version = "0.38.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a22715a5d6deef63c637207afbe68d0c72c3f8d0022d7cf9714c442d6157606b"
+checksum = "f1c93dd1c9683b438c392c492109cb702b8090b2bfc8fed6f6e4eb4523f17af3"
dependencies = [
"bitflags 2.10.0",
"fallible-iterator",
@@ -344,13 +360,14 @@ dependencies = [
"hashlink",
"libsqlite3-sys",
"smallvec",
+ "sqlite-wasm-rs",
]
[[package]]
name = "rustix"
-version = "1.1.2"
+version = "1.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cd15f8a2c5551a84d56efdc1cd049089e409ac19a3072d5037a17fd70719ff3e"
+checksum = "146c9e247ccc180c1f61615433868c99f3de3ae256a30a43b49f67c2d9171f34"
dependencies = [
"bitflags 2.10.0",
"errno",
@@ -360,10 +377,10 @@ dependencies = [
]
[[package]]
-name = "ryu"
-version = "1.0.20"
+name = "rustversion"
+version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "28d3b2b1366ec20994f1fd18c3c594f05c5dd4bc44d8bb0c1c632c8d6829481f"
+checksum = "b39cdef0fa800fc44525c84ccb54a029961a8215f9619753635a9c0d2538d46d"
[[package]]
name = "scopeguard"
@@ -403,15 +420,15 @@ dependencies = [
[[package]]
name = "serde_json"
-version = "1.0.145"
+version = "1.0.149"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "402a6f66d8c709116cf22f558eab210f5a50187f702eb4d7e5ef38d9a7f1c79c"
+checksum = "83fc039473c5595ace860d8c4fafa220ff474b3fc6bfdb4293327f1a37e94d86"
dependencies = [
"itoa",
"memchr",
- "ryu",
"serde",
"serde_core",
+ "zmij",
]
[[package]]
@@ -443,10 +460,11 @@ dependencies = [
[[package]]
name = "signal-hook-registry"
-version = "1.4.6"
+version = "1.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b2a4719bff48cee6b39d12c020eeb490953ad2443b7055bd0b21fca26bd8c28b"
+checksum = "c4db69cba1110affc0e9f7bcd48bbf87b3f4fc7c61fc9155afd4c469eb3d6c1b"
dependencies = [
+ "errno",
"libc",
]
@@ -457,10 +475,23 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03"
[[package]]
+name = "sqlite-wasm-rs"
+version = "0.5.1"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "05e98301bf8b0540c7de45ecd760539b9c62f5772aed172f08efba597c11cd5d"
+dependencies = [
+ "cc",
+ "hashbrown",
+ "js-sys",
+ "thiserror",
+ "wasm-bindgen",
+]
+
+[[package]]
name = "syn"
-version = "2.0.108"
+version = "2.0.114"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "da58917d35242480a05c2897064da0a80589a2a0476c9a3f2fdc83b53502e917"
+checksum = "d4d107df263a3013ef9b1879b0df87d706ff80f65a86ea879bd9c31f9b307c2a"
dependencies = [
"proc-macro2",
"quote",
@@ -469,9 +500,9 @@ dependencies = [
[[package]]
name = "tempfile"
-version = "3.23.0"
+version = "3.24.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2d31c77bdf42a745371d260a26ca7163f1e0924b64afa0b688e61b5a9fa02f16"
+checksum = "655da9c7eb6305c55742045d5a8d2037996d61d8de95806335c7c86ce0f82e9c"
dependencies = [
"fastrand",
"getrandom",
@@ -481,6 +512,26 @@ dependencies = [
]
[[package]]
+name = "thiserror"
+version = "2.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "f63587ca0f12b72a0600bcba1d40081f830876000bb46dd2337a3051618f4fc8"
+dependencies = [
+ "thiserror-impl",
+]
+
+[[package]]
+name = "thiserror-impl"
+version = "2.0.17"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "3ff15c8ecd7de3849db632e14d18d2571fa09dfc5ed93479bc4485c7a517c913"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn",
+]
+
+[[package]]
name = "thread_local"
version = "1.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -491,9 +542,9 @@ dependencies = [
[[package]]
name = "unicode-ident"
-version = "1.0.20"
+version = "1.0.22"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "462eeb75aeb73aea900253ce739c8e18a67423fadf006037cd3ff27e82748a06"
+checksum = "9312f7c4f6ff9069b165498234ce8be658059c6728633667c526e27dc2cf1df5"
[[package]]
name = "unicode-segmentation"
@@ -529,6 +580,51 @@ dependencies = [
]
[[package]]
+name = "wasm-bindgen"
+version = "0.2.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "0d759f433fa64a2d763d1340820e46e111a7a5ab75f993d1852d70b03dbb80fd"
+dependencies = [
+ "cfg-if",
+ "once_cell",
+ "rustversion",
+ "wasm-bindgen-macro",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-macro"
+version = "0.2.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "48cb0d2638f8baedbc542ed444afc0644a29166f1595371af4fecf8ce1e7eeb3"
+dependencies = [
+ "quote",
+ "wasm-bindgen-macro-support",
+]
+
+[[package]]
+name = "wasm-bindgen-macro-support"
+version = "0.2.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cefb59d5cd5f92d9dcf80e4683949f15ca4b511f4ac0a6e14d4e1ac60c6ecd40"
+dependencies = [
+ "bumpalo",
+ "proc-macro2",
+ "quote",
+ "syn",
+ "wasm-bindgen-shared",
+]
+
+[[package]]
+name = "wasm-bindgen-shared"
+version = "0.2.106"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "cbc538057e648b67f72a982e708d485b2efa771e1ac05fec311f9f63e5800db4"
+dependencies = [
+ "unicode-ident",
+]
+
+[[package]]
name = "winapi"
version = "0.3.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
@@ -636,3 +732,9 @@ name = "wit-bindgen"
version = "0.46.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f17a85883d4e6d00e8a97c586de764dabcc06133f7f1d55dce5cdc070ad7fe59"
+
+[[package]]
+name = "zmij"
+version = "1.0.14"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "bd8f3f50b848df28f887acb68e41201b5aea6bc8a8dacc00fb40635ff9a72fea"
diff --git a/crates/cli/src/run.rs b/crates/cli/src/run.rs
index 5d121d2..0084a6c 100644
--- a/crates/cli/src/run.rs
+++ b/crates/cli/src/run.rs
@@ -50,7 +50,7 @@ fn run_words(words: Vec<Word>, locale: &Locale) -> i32 {
let found = !answer.is_empty() && tr.split(',').any(|tr| tr.trim().contains(answer));
if found {
- if word.steps == MAX_STEPS - 1 {
+ if word.steps as usize == MAX_STEPS - 1 {
let _ = update_success(&word, word.succeeded + 1, 0);
} else {
let _ = update_success(&word, word.succeeded, word.steps + 1);
diff --git a/crates/cli/src/words.rs b/crates/cli/src/words.rs
index 60609a9..9ed16d3 100644
--- a/crates/cli/src/words.rs
+++ b/crates/cli/src/words.rs
@@ -221,7 +221,7 @@ fn ask_for_word_based_on(enunciated: String, word: Word) -> Result<Word, String>
Category::Determiner,
];
let Ok(category) = Select::new("Category:", categories)
- .with_starting_cursor(word.category as usize)
+ .with_starting_cursor((word.category as isize).try_into().unwrap())
.prompt()
else {
return Err("abort!".to_string());
@@ -237,7 +237,7 @@ fn ask_for_word_based_on(enunciated: String, word: Word) -> Result<Word, String>
let gender = match category {
Category::Noun => {
match Select::new("Gender:", genders)
- .with_starting_cursor(word.gender as usize)
+ .with_starting_cursor((word.gender as isize).try_into().unwrap())
.prompt()
{
Ok(selection) => selection,
@@ -255,7 +255,7 @@ fn ask_for_word_based_on(enunciated: String, word: Word) -> Result<Word, String>
else {
return Err("abort!".to_string());
};
- let Ok(inflection_id) = inflection.parse::<usize>() else {
+ let Ok(inflection_id) = inflection.parse::<isize>() else {
return Err(format!("bad value for inflection ID '{inflection}'"));
};
Some(inflection_id)
@@ -305,7 +305,7 @@ fn ask_for_word_based_on(enunciated: String, word: Word) -> Result<Word, String>
else {
return Err("abort!".to_string());
};
- let Ok(weight) = raw_weight.parse::<usize>() else {
+ let Ok(weight) = raw_weight.parse::<isize>() else {
return Err(format!(
"bad value for inflection ID '{}'",
inflection_id.unwrap_or(0)
diff --git a/lib/mihi/Cargo.toml b/lib/mihi/Cargo.toml
index 4b973d6..15ed1fb 100644
--- a/lib/mihi/Cargo.toml
+++ b/lib/mihi/Cargo.toml
@@ -8,6 +8,6 @@ edition.workspace = true
license.workspace = true
[dependencies]
-rusqlite = { version = "0.35.0", features = ["bundled"] }
+rusqlite = { version = "0.38.0", features = ["bundled"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
diff --git a/lib/mihi/src/lib.rs b/lib/mihi/src/lib.rs
index 5c15d8c..fc73189 100644
--- a/lib/mihi/src/lib.rs
+++ b/lib/mihi/src/lib.rs
@@ -40,10 +40,10 @@ impl std::fmt::Display for Category {
}
}
-impl TryFrom<usize> for Category {
+impl TryFrom<isize> for Category {
type Error = &'static str;
- fn try_from(value: usize) -> Result<Self, Self::Error> {
+ fn try_from(value: isize) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Unknown),
1 => Ok(Self::Noun),
@@ -83,10 +83,10 @@ impl Gender {
}
}
-impl TryFrom<usize> for Gender {
+impl TryFrom<isize> for Gender {
type Error = &'static str;
- fn try_from(value: usize) -> Result<Self, Self::Error> {
+ fn try_from(value: isize) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Masculine),
1 => Ok(Self::Feminine),
@@ -117,10 +117,10 @@ pub enum Language {
Latin,
}
-impl TryFrom<usize> for Language {
+impl TryFrom<isize> for Language {
type Error = &'static str;
- fn try_from(value: usize) -> Result<Self, Self::Error> {
+ fn try_from(value: isize) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Unknown),
1 => Ok(Self::Latin),
@@ -206,8 +206,8 @@ pub struct Word {
pub enunciated: String,
pub particle: String,
pub language: Language,
- pub declension_id: Option<usize>,
- pub conjugation_id: Option<usize>,
+ pub declension_id: Option<isize>,
+ pub conjugation_id: Option<isize>,
pub kind: String,
pub category: Category,
pub regular: bool,
@@ -216,17 +216,17 @@ pub struct Word {
pub suffix: Option<String>,
pub translation: Value,
pub flags: Value,
- pub succeeded: usize,
- pub steps: usize,
- pub weight: usize,
+ pub succeeded: isize,
+ pub steps: isize,
+ pub weight: isize,
}
impl Word {
pub fn from(
particle: String,
category: Category,
- declension_id: Option<usize>,
- conjugation_id: Option<usize>,
+ declension_id: Option<isize>,
+ conjugation_id: Option<isize>,
gender: Gender,
kind: String,
) -> Word {
@@ -251,7 +251,7 @@ impl Word {
}
}
- pub fn inflection_id(&self) -> Option<usize> {
+ pub fn inflection_id(&self) -> Option<isize> {
if matches!(self.category, Category::Verb) {
return Some(self.conjugation_id.unwrap());
}
@@ -341,7 +341,7 @@ pub fn create_word(word: Word) -> Result<(), String> {
match word.category {
Category::Noun => match word.declension_id {
Some(id @ 1..7) => {
- if !DECLENSIONS_WITH_KINDS[id - 1].contains(&word.kind.as_str()) {
+ if !DECLENSIONS_WITH_KINDS[id as usize - 1].contains(&word.kind.as_str()) {
return Err(format!("bad kind for declension '{id}'"));
}
}
@@ -354,7 +354,7 @@ pub fn create_word(word: Word) -> Result<(), String> {
},
Category::Adjective => match word.declension_id {
Some(id @ (1 | 3)) => {
- if !ADJECTIVE_KINDS[id - 1].contains(&word.kind.as_str()) {
+ if !ADJECTIVE_KINDS[id as usize - 1].contains(&word.kind.as_str()) {
return Err(format!("bad kind for declension '{id}'"));
}
}
@@ -410,14 +410,14 @@ pub fn create_word(word: Word) -> Result<(), String> {
params![
word.enunciated.trim(),
word.particle.trim(),
- word.language as usize,
+ word.language as isize,
word.declension_id,
word.conjugation_id,
word.kind.trim(),
- word.category as usize,
+ word.category as isize,
word.regular,
word.locative,
- word.gender as usize,
+ word.gender as isize,
word.suffix,
serde_json::to_string(&word.flags).unwrap(),
serde_json::to_string(&word.translation).unwrap(),
@@ -451,10 +451,10 @@ pub fn update_word(word: Word) -> Result<(), String> {
word.declension_id,
word.conjugation_id,
word.kind,
- word.category as usize,
+ word.category as isize,
word.regular,
word.locative,
- word.gender as usize,
+ word.gender as isize,
word.suffix,
serde_json::to_string(&word.flags).unwrap(),
serde_json::to_string(&word.translation).unwrap(),
@@ -514,14 +514,14 @@ pub fn find_by(enunciated: &str) -> Result<Word, String> {
id: row.get(0).unwrap(),
enunciated: row.get(1).unwrap(),
particle: row.get(2).unwrap(),
- language: row.get::<usize, usize>(3).unwrap().try_into()?,
+ language: row.get::<usize, isize>(3).unwrap().try_into()?,
declension_id: row.get(4).unwrap(),
conjugation_id: row.get(5).unwrap(),
kind: row.get(6).unwrap(),
- category: row.get::<usize, usize>(7).unwrap().try_into()?,
+ category: row.get::<usize, isize>(7).unwrap().try_into()?,
regular: row.get(8).unwrap(),
locative: row.get(9).unwrap(),
- gender: row.get::<usize, usize>(10).unwrap().try_into()?,
+ gender: row.get::<usize, isize>(10).unwrap().try_into()?,
suffix: row.get(11).unwrap(),
translation: serde_json::from_str(&row.get::<usize, String>(12).unwrap()).unwrap(),
succeeded: row.get(13).unwrap(),
@@ -556,7 +556,7 @@ fn flags_clause(flags: &Vec<String>) -> String {
pub fn select_relevant_words(
category: Category,
flags: &Vec<String>,
- number: usize,
+ number: isize,
) -> Result<Vec<Word>, String> {
let conn = get_connection()?;
let mut stmt = conn
@@ -574,7 +574,7 @@ pub fn select_relevant_words(
.as_str(),
)
.unwrap();
- let mut it = stmt.query([category as usize, number]).unwrap();
+ let mut it = stmt.query([category as isize, number]).unwrap();
let mut res = vec![];
while let Some(row) = it.next().unwrap() {
@@ -582,14 +582,14 @@ pub fn select_relevant_words(
id: row.get(0).unwrap(),
enunciated: row.get(1).unwrap(),
particle: row.get(2).unwrap(),
- language: row.get::<usize, usize>(3).unwrap().try_into()?,
+ language: row.get::<usize, isize>(3).unwrap().try_into()?,
declension_id: row.get(4).unwrap(),
conjugation_id: row.get(5).unwrap(),
kind: row.get(6).unwrap(),
- category: row.get::<usize, usize>(7).unwrap().try_into()?,
+ category: row.get::<usize, isize>(7).unwrap().try_into()?,
regular: row.get(8).unwrap(),
locative: row.get(9).unwrap(),
- gender: row.get::<usize, usize>(10).unwrap().try_into()?,
+ gender: row.get::<usize, isize>(10).unwrap().try_into()?,
suffix: row.get(11).unwrap(),
translation: serde_json::from_str(&row.get::<usize, String>(12).unwrap()).unwrap(),
succeeded: row.get(13).unwrap(),
@@ -601,7 +601,7 @@ pub fn select_relevant_words(
Ok(res)
}
-pub fn update_success(word: &Word, success: usize, steps: usize) -> Result<(), String> {
+pub fn update_success(word: &Word, success: isize, steps: isize) -> Result<(), String> {
let conn = get_connection()?;
match conn.execute(
@@ -659,10 +659,10 @@ impl std::fmt::Display for ExerciseKind {
}
}
-impl TryFrom<usize> for ExerciseKind {
+impl TryFrom<isize> for ExerciseKind {
type Error = &'static str;
- fn try_from(value: usize) -> Result<Self, Self::Error> {
+ fn try_from(value: isize) -> Result<Self, Self::Error> {
match value {
0 => Ok(Self::Pensum),
1 => Ok(Self::Translation),
@@ -709,7 +709,7 @@ pub fn create_exercise(exercise: Exercise) -> Result<(), String> {
exercise.enunciate,
exercise.solution,
exercise.lessons,
- exercise.kind as usize,
+ exercise.kind as isize,
],
) {
Ok(_) => Ok(()),
@@ -765,7 +765,7 @@ pub fn find_exercise_by_title(title: &str) -> Result<Exercise, String> {
enunciate: row.get(2).unwrap(),
solution: row.get(3).unwrap(),
lessons: row.get(4).unwrap(),
- kind: row.get::<usize, usize>(5).unwrap().try_into()?,
+ kind: row.get::<usize, isize>(5).unwrap().try_into()?,
}),
None => Err("no exercises were found with this title".to_string()),
},
@@ -791,7 +791,7 @@ pub fn update_exercise(exercise: Exercise) -> Result<(), String> {
exercise.enunciate,
exercise.solution,
exercise.lessons,
- exercise.kind as usize,
+ exercise.kind as isize,
],
) {
Ok(_) => Ok(()),
@@ -814,7 +814,7 @@ pub fn delete_exercise(title: &str) -> Result<(), String> {
// by `kind`.
pub fn select_relevant_exercises(
kind: Option<ExerciseKind>,
- limit: usize,
+ limit: isize,
) -> Result<Vec<Exercise>, String> {
let conn = get_connection()?;
@@ -830,7 +830,7 @@ pub fn select_relevant_exercises(
LIMIT ?2",
)
.unwrap();
- stmt.query([kind as usize, limit]).unwrap()
+ stmt.query([kind as isize, limit]).unwrap()
}
None => {
stmt = conn
@@ -853,7 +853,7 @@ pub fn select_relevant_exercises(
enunciate: row.get(2).unwrap(),
solution: row.get(3).unwrap(),
lessons: row.get(4).unwrap(),
- kind: row.get::<usize, usize>(5).unwrap().try_into()?,
+ kind: row.get::<usize, isize>(5).unwrap().try_into()?,
});
}
Ok(res)
@@ -1093,17 +1093,24 @@ pub fn group_declension_inflections(
while let Some(row) = it.next().unwrap() {
// Fetch the number and account for defectives on number.
- let number: usize = row.get(1).unwrap();
+ let number_i: isize = row.get(1).unwrap();
+ let number: usize = usize::try_from(number_i).expect("not expecting a negative number");
if (number == 0 && word.is_flag_set("onlyplural"))
|| (number == 1 && word.is_flag_set("onlysingular"))
{
continue;
}
- let case = row.get(3).unwrap();
+ let case_i: isize = row.get(3).unwrap();
let term: String = row.get(4).unwrap();
- table.add(word, case, number, gender, &term);
+ table.add(
+ word,
+ usize::try_from(case_i).expect("not expecting a negative number"),
+ number,
+ gender,
+ &term,
+ );
}
if let Some(sets) = word.flags.get("sets") {