Index: Cargo.toml ================================================================== --- Cargo.toml +++ Cargo.toml @@ -1,8 +1,8 @@ [package] name = "strval" -version = "0.1.1" +version = "0.2.0" edition = "2024" license = "0BSD" # https://crates.io/category_slugs categories = ["text-processing"] keywords = ["parsing", "string", "rusqlite"] Index: src/binu64count.rs ================================================================== --- src/binu64count.rs +++ src/binu64count.rs @@ -53,10 +53,16 @@ } fn val_str(&self) -> Option { Some(self.val.to_string()) } + + fn get_str_vals(&self) -> (String, Option) { + let eval = self.val.to_string(); + let eval = (self.sval != eval).then_some(eval); + (self.sval.clone(), eval) + } } impl AsRef for BinU64Count { fn as_ref(&self) -> &str { &self.sval Index: src/binu64size.rs ================================================================== --- src/binu64size.rs +++ src/binu64size.rs @@ -53,10 +53,16 @@ } fn val_str(&self) -> Option { Some(self.val.to_string()) } + + fn get_str_vals(&self) -> (String, Option) { + let eval = self.val.to_string(); + let eval = (self.sval != eval).then_some(eval); + (self.sval.clone(), eval) + } } impl AsRef for BinU64Size { fn as_ref(&self) -> &str { &self.sval Index: src/binusizecount.rs ================================================================== --- src/binusizecount.rs +++ src/binusizecount.rs @@ -53,10 +53,16 @@ } fn val_str(&self) -> Option { Some(self.val.to_string()) } + + fn get_str_vals(&self) -> (String, Option) { + let eval = self.val.to_string(); + let eval = (self.sval != eval).then_some(eval); + (self.sval.clone(), eval) + } } impl AsRef for BinUsizeCount { fn as_ref(&self) -> &str { &self.sval Index: src/binusizesize.rs ================================================================== --- src/binusizesize.rs +++ src/binusizesize.rs @@ -53,10 +53,16 @@ } fn val_str(&self) -> Option { Some(self.val.to_string()) } + + fn get_str_vals(&self) -> (String, Option) { + let eval = self.val.to_string(); + let eval = (self.sval != eval).then_some(eval); + (self.sval.clone(), eval) + } } impl AsRef for BinUsizeSize { fn as_ref(&self) -> &str { &self.sval Index: src/boolean.rs ================================================================== --- src/boolean.rs +++ src/boolean.rs @@ -47,10 +47,14 @@ Some(String::from("true")) } else { Some(String::from("false")) } } + + fn get_str_vals(&self) -> (String, Option) { + (self.sval.clone(), None) + } } impl AsRef for Bool { fn as_ref(&self) -> &str { &self.sval Index: src/decu64count.rs ================================================================== --- src/decu64count.rs +++ src/decu64count.rs @@ -53,10 +53,16 @@ } fn val_str(&self) -> Option { Some(self.val.to_string()) } + + fn get_str_vals(&self) -> (String, Option) { + let eval = self.val.to_string(); + let eval = (self.sval != eval).then_some(eval); + (self.sval.clone(), eval) + } } impl AsRef for DecU64Count { fn as_ref(&self) -> &str { &self.sval Index: src/decu64size.rs ================================================================== --- src/decu64size.rs +++ src/decu64size.rs @@ -52,10 +52,16 @@ } fn val_str(&self) -> Option { Some(self.val.to_string()) } + + fn get_str_vals(&self) -> (String, Option) { + let eval = self.val.to_string(); + let eval = (self.sval != eval).then_some(eval); + (self.sval.clone(), eval) + } } impl AsRef for DecU64Size { fn as_ref(&self) -> &str { &self.sval Index: src/decusizecount.rs ================================================================== --- src/decusizecount.rs +++ src/decusizecount.rs @@ -53,10 +53,16 @@ } fn val_str(&self) -> Option { Some(self.val.to_string()) } + + fn get_str_vals(&self) -> (String, Option) { + let eval = self.val.to_string(); + let eval = (self.sval != eval).then_some(eval); + (self.sval.clone(), eval) + } } impl AsRef for DecUsizeCount { fn as_ref(&self) -> &str { &self.sval Index: src/decusizesize.rs ================================================================== --- src/decusizesize.rs +++ src/decusizesize.rs @@ -52,10 +52,16 @@ } fn val_str(&self) -> Option { Some(self.val.to_string()) } + + fn get_str_vals(&self) -> (String, Option) { + let eval = self.val.to_string(); + let eval = (self.sval != eval).then_some(eval); + (self.sval.clone(), eval) + } } impl AsRef for DecUsizeSize { fn as_ref(&self) -> &str { &self.sval Index: src/dur.rs ================================================================== --- src/dur.rs +++ src/dur.rs @@ -60,10 +60,14 @@ } fn val_str(&self) -> Option { None } + + fn get_str_vals(&self) -> (String, Option) { + (self.sval.clone(), None) + } } impl AsRef for Dur { fn as_ref(&self) -> &str { &self.sval Index: src/lib.rs ================================================================== --- src/lib.rs +++ src/lib.rs @@ -75,10 +75,17 @@ fn get(&self) -> Self::Type; /// Return a string representation of the value. fn val_str(&self) -> Option; + + /// Return a string representation of the configuration parameter's value, + /// with an optional "evaluated" string. + /// + /// If the "evaluated" string is identical to the regular string + /// representation, the second field will be `None`. + fn get_str_vals(&self) -> (String, Option); } /// Define a default (string) value and provide a value validator. pub trait Controller { type Type; Index: src/percent.rs ================================================================== --- src/percent.rs +++ src/percent.rs @@ -43,10 +43,14 @@ } fn val_str(&self) -> Option { Some(format!("{}%", self.val * 100.0)) } + + fn get_str_vals(&self) -> (String, Option) { + (self.sval.clone(), None) + } } impl AsRef for Percent { fn as_ref(&self) -> &str { &self.sval Index: src/relabslim.rs ================================================================== --- src/relabslim.rs +++ src/relabslim.rs @@ -91,10 +91,14 @@ match self.val { Lim::Rel(f) => Some(f.to_string()), Lim::Abs(v) => Some(v.to_string()) } } + + fn get_str_vals(&self) -> (String, Option) { + (self.sval.clone(), None) + } } impl AsRef for RelAbsLim { fn as_ref(&self) -> &str { &self.sval Index: src/select.rs ================================================================== --- src/select.rs +++ src/select.rs @@ -45,10 +45,14 @@ } fn val_str(&self) -> Option { None } + + fn get_str_vals(&self) -> (String, Option) { + (self.sval.clone(), None) + } } impl AsRef for Select { fn as_ref(&self) -> &str { &self.sval Index: src/str.rs ================================================================== --- src/str.rs +++ src/str.rs @@ -52,10 +52,14 @@ } fn val_str(&self) -> Option { None } + + fn get_str_vals(&self) -> (String, Option) { + (self.val.clone(), None) + } } impl AsRef for Str { fn as_ref(&self) -> &str { &self.val Index: www/changelog.md ================================================================== --- www/changelog.md +++ www/changelog.md @@ -2,23 +2,33 @@ ⚠️ indicates a breaking change. ## [Unreleased] -[Details](/vdiff?from=strval-0.1.0&to=trunk) +[Details](/vdiff?from=strval-0.2.0&to=trunk) ### Added ### Changed ### Removed --- + +## [0.2.0] - 2025-07-09 + +[Details](/vdiff?from=strval-0.1.1&to=strval-0.2.0) + +### Added + +- ⚠️ Add trait method `StrVal::get_str_vals()`. + +--- ## [0.1.1] - 2025-07-09 -[Details](/vdiff?from=strval-0.1.0&to=trunk) +[Details](/vdiff?from=strval-0.1.0&to=strval-0.1.1) ### Added - `BinUsizeCount`, `BinUsizeSize`, `DecUsizeCount`, `DecUsizeSize`