Trait WellKnown

Source
pub trait WellKnown: 'static + Sized {
    type Deserializer: DeserializeParam<Self>;

    const DE: Self::Deserializer;
}
Expand description

Parameter type with well-known deserializer.

Conceptually, this means that the type is known to behave well when deserializing data from a Value (ordinarily, using serde::Deserialize).

§Implementations

Basic well-known types include:

  • bool
  • String
  • PathBuf
  • Signed and unsigned integers, including non-zero variants
  • f32, f64

These types use Serde deserializer. Integer types up to and including 64-bit ones only permit integer input. In contrast, u128, i128 and their non-zero counterparts permit either integer or string input because the serde_json object model cannot represent large integers (>u64::MAX or <i64::MIN). Importantly, string representation must be used for such large integers because otherwise they will be converted (with precision loss!) to f64 by internal serde_json logic before they ever enter the smart-config library.

WellKnown is also implemented for more complex types:

Rust typeDeserializerExpected JSON
DurationWithUnitstring or object
ByteSizeWithUnitstring or object
OptionOptionalvalue, or null, or nothing
Vec, [_; N], HashSet, BTreeSetRepeatedarray
HashMap, BTreeMapRepeatedEntriesobject

Options handling can be customized via WellKnownOption or CustomKnownOption traits.

Required Associated Constants§

Source

const DE: Self::Deserializer

Deserializer instance.

Required Associated Types§

Source

type Deserializer: DeserializeParam<Self>

Type of the deserializer used for this type.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl WellKnown for IpAddr

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for SocketAddr

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for bool

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for f32

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for f64

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for i8

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for i16

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for i32

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for i64

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for i128

Unlike other ints, we allow str inputs for 128-bit ints because serde_json::Value doesn’t support representing 128-bit numbers natively.

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for isize

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for u8

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for u16

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for u32

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for u64

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for u128

Unlike other ints, we allow str inputs for 128-bit ints because serde_json::Value doesn’t support representing 128-bit numbers natively.

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for usize

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for String

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Serde<{ $crate::_basic_types!($($expecting)+) }>

Source§

impl WellKnown for Ipv4Addr

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for Ipv6Addr

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for SocketAddrV4

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for SocketAddrV6

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for Duration

Source§

impl WellKnown for PathBuf

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroI8

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroI16

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroI32

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroI64

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroI128

Unlike other ints, we allow str inputs for 128-bit ints because serde_json::Value doesn’t support representing 128-bit numbers natively.

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroIsize

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroU8

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroU16

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroU32

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroU64

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroU128

Unlike other ints, we allow str inputs for 128-bit ints because serde_json::Value doesn’t support representing 128-bit numbers natively.

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for NonZeroUsize

Source§

const DE: Self::Deserializer

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for Address

Available on crate feature alloy only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for B64

Available on crate feature alloy only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for B128

Available on crate feature alloy only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for B256

Available on crate feature alloy only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for B512

Available on crate feature alloy only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for H128

Available on crate feature primitive-types only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for H160

Available on crate feature primitive-types only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for H256

Available on crate feature primitive-types only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for H384

Available on crate feature primitive-types only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for H512

Available on crate feature primitive-types only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for H768

Available on crate feature primitive-types only.

Accepts a hex string with an optional 0x prefix.

Source§

const DE: Self::Deserializer = HASH_DE

Source§

type Deserializer = Qualified<Serde<{ $crate::_basic_types!($($expecting)+) }>>

Source§

impl WellKnown for U8

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U16

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U32

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U64

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U128

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U128

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U160

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U256

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U256

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U512

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl WellKnown for U512

Available on crate feature primitive-types only.

Accepts a hex string with an mandatory 0x prefix. This prefix is required to clearly signal hex encoding so that "34" doesn’t get mistaken for decimal 34.

Source§

const DE: Self::Deserializer = HexUintDeserializer

Source§

type Deserializer = HexUintDeserializer

Source§

impl<K, V> WellKnown for BTreeMap<K, V>
where K: 'static + Eq + Ord + WellKnown, V: 'static + WellKnown,

Source§

impl<K, V, S> WellKnown for HashMap<K, V, S>
where K: 'static + Eq + Hash + WellKnown, V: 'static + WellKnown, S: 'static + Default + BuildHasher,

Source§

impl<T> WellKnown for BTreeSet<T>
where T: Eq + Ord + WellKnown,

Source§

impl<T, S> WellKnown for HashSet<T, S>
where T: Eq + Hash + WellKnown, S: 'static + Default + BuildHasher,

Source§

impl<T: CustomKnownOption> WellKnown for Option<T>

Source§

impl<T: WellKnown> WellKnown for Vec<T>

Source§

impl<T: WellKnown, const N: usize> WellKnown for [T; N]

Implementors§