Struct smart_config::de::WithUnit
source · pub struct WithUnit;
Expand description
Default deserializer for Duration
s and ByteSize
s.
Values can be deserialized from 2 formats:
- String consisting of an integer, optional whitespace and a unit, such as “30 secs” or “500ms” (for
Duration
) / “4 MiB” (forByteSize
). The unit must correspond to aTimeUnit
/SizeUnit
. - Object with a single key and an integer value, such as
{ "hours": 3 }
(forDuration
) /{ "kb": 512 }
(forSizeUnit
).
Thanks to nesting of object params, the second approach automatically means that a duration can be parsed
from a param name suffixed with a unit. For example, a value latency_ms: 500
for parameter latency
will be recognized as 500 ms.
§Examples
#[derive(DescribeConfig, DeserializeConfig)]
struct TestConfig {
latency: Duration,
disk: ByteSize,
}
// Parsing from a string
let source = smart_config::config!("latency": "30 secs", "disk": "256 MiB");
let config: TestConfig = testing::test(source)?;
assert_eq!(config.latency, Duration::from_secs(30));
assert_eq!(config.disk, ByteSize(256 << 20));
// Parsing from an object
let source = smart_config::config!(
"latency": serde_json::json!({ "hours": 3 }),
"disk": serde_json::json!({ "gigabytes": 2 }),
);
let config: TestConfig = testing::test(source)?;
assert_eq!(config.latency, Duration::from_secs(3 * 3_600));
assert_eq!(config.disk, ByteSize(2 << 30));
// Parsing from a suffixed parameter name
let source = Environment::from_iter("", [("LATENCY_SEC", "15"), ("DISK_GB", "10")]);
let config: TestConfig = testing::test(source)?;
assert_eq!(config.latency, Duration::from_secs(15));
assert_eq!(config.disk, ByteSize(10 << 30));
Trait Implementations§
source§impl DeserializeParam<ByteSize> for WithUnit
impl DeserializeParam<ByteSize> for WithUnit
source§const EXPECTING: BasicTypes = Self::EXPECTED_TYPES
const EXPECTING: BasicTypes = Self::EXPECTED_TYPES
Describes which parameter this deserializer is expecting.
source§fn describe(&self, description: &mut TypeDescription)
fn describe(&self, description: &mut TypeDescription)
Additional info about the deserialized type, e.g., extended description.
source§fn deserialize_param(
&self,
ctx: DeserializeContext<'_>,
param: &'static ParamMetadata,
) -> Result<ByteSize, ErrorWithOrigin>
fn deserialize_param( &self, ctx: DeserializeContext<'_>, param: &'static ParamMetadata, ) -> Result<ByteSize, ErrorWithOrigin>
Performs deserialization given the context and param metadata. Read more
source§impl DeserializeParam<Duration> for WithUnit
impl DeserializeParam<Duration> for WithUnit
source§const EXPECTING: BasicTypes = Self::EXPECTED_TYPES
const EXPECTING: BasicTypes = Self::EXPECTED_TYPES
Describes which parameter this deserializer is expecting.
source§fn describe(&self, description: &mut TypeDescription)
fn describe(&self, description: &mut TypeDescription)
Additional info about the deserialized type, e.g., extended description.
source§fn deserialize_param(
&self,
ctx: DeserializeContext<'_>,
param: &'static ParamMetadata,
) -> Result<Duration, ErrorWithOrigin>
fn deserialize_param( &self, ctx: DeserializeContext<'_>, param: &'static ParamMetadata, ) -> Result<Duration, ErrorWithOrigin>
Performs deserialization given the context and param metadata. Read more
source§impl DeserializeParam<Option<ByteSize>> for WithUnit
impl DeserializeParam<Option<ByteSize>> for WithUnit
source§const EXPECTING: BasicTypes = Self::EXPECTED_TYPES
const EXPECTING: BasicTypes = Self::EXPECTED_TYPES
Describes which parameter this deserializer is expecting.
source§fn describe(&self, description: &mut TypeDescription)
fn describe(&self, description: &mut TypeDescription)
Additional info about the deserialized type, e.g., extended description.
source§fn deserialize_param(
&self,
ctx: DeserializeContext<'_>,
param: &'static ParamMetadata,
) -> Result<Option<ByteSize>, ErrorWithOrigin>
fn deserialize_param( &self, ctx: DeserializeContext<'_>, param: &'static ParamMetadata, ) -> Result<Option<ByteSize>, ErrorWithOrigin>
Performs deserialization given the context and param metadata. Read more
source§impl DeserializeParam<Option<Duration>> for WithUnit
impl DeserializeParam<Option<Duration>> for WithUnit
source§const EXPECTING: BasicTypes = Self::EXPECTED_TYPES
const EXPECTING: BasicTypes = Self::EXPECTED_TYPES
Describes which parameter this deserializer is expecting.
source§fn describe(&self, description: &mut TypeDescription)
fn describe(&self, description: &mut TypeDescription)
Additional info about the deserialized type, e.g., extended description.
source§fn deserialize_param(
&self,
ctx: DeserializeContext<'_>,
param: &'static ParamMetadata,
) -> Result<Option<Duration>, ErrorWithOrigin>
fn deserialize_param( &self, ctx: DeserializeContext<'_>, param: &'static ParamMetadata, ) -> Result<Option<Duration>, ErrorWithOrigin>
Performs deserialization given the context and param metadata. Read more
impl Copy for WithUnit
Auto Trait Implementations§
impl Freeze for WithUnit
impl RefUnwindSafe for WithUnit
impl Send for WithUnit
impl Sync for WithUnit
impl Unpin for WithUnit
impl UnwindSafe for WithUnit
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)source§impl<T> CloneToUninit for Twhere
T: Copy,
impl<T> CloneToUninit for Twhere
T: Copy,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
🔬This is a nightly-only experimental API. (
clone_to_uninit
)