Struct smart_config::de::Optional

source ·
pub struct Optional<De, const AND_THEN: bool = false>(pub De);
Expand description

Deserializer decorator that wraps the output of the underlying decorator in Some and returns None if the input for the param is missing.

§Encoding nulls

For env variables, specifying null values can be tricky since natively, all env variable values are strings. There are the following was to avoid this issue:

  • JSON coercion can be used to pass unambiguous JSON values (incl. null).
  • If the original deserializer doesn’t expect string values, an empty string or "null" will be coerced to a null.
  • deserialize_if attribute can help filtering out empty strings etc. for types that do expect string values.

§Transforms

The second generic param is the transform determining how the wrapped deserializer is delegated to. Regardless of the transform, missing and null values always result in None; any other value, will be passed to the wrapped deserializer.

  • The default transform (AND_THEN == false) is similar to map. It requires the underlying deserializer to return a non-optional value.
  • AND_THEN == true is similar to and_then. It expects the underlying deserializer to return an Option.

Tuple Fields§

§0: De

Implementations§

source§

impl<De> Optional<De>

source

pub const fn map(deserializer: De) -> Self

Wraps a deserializer returning a non-optional value, similarly to Option::map().

source§

impl<De> Optional<De, true>

source

pub const fn and_then(deserializer: De) -> Self

Wraps a deserializer returning an optional value, similarly to Option::and_then().

Trait Implementations§

source§

impl<De: Debug, const AND_THEN: bool> Debug for Optional<De, AND_THEN>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
source§

impl<T, De: DeserializeParam<T>> DeserializeParam<Option<T>> for Optional<De>

source§

const EXPECTING: BasicTypes = De::EXPECTING

Describes which parameter this deserializer is expecting.
source§

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<T>, ErrorWithOrigin>

Performs deserialization given the context and param metadata. Read more
source§

fn serialize_param(&self, param: &Option<T>) -> Value

Serializes the provided parameter to the JSON model. Read more
source§

impl<T, De> DeserializeParam<Option<T>> for Optional<De, true>
where De: DeserializeParam<Option<T>>,

source§

const EXPECTING: BasicTypes = De::EXPECTING

Describes which parameter this deserializer is expecting.
source§

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<T>, ErrorWithOrigin>

Performs deserialization given the context and param metadata. Read more
source§

fn serialize_param(&self, param: &Option<T>) -> Value

Serializes the provided parameter to the JSON model. Read more

Auto Trait Implementations§

§

impl<De, const AND_THEN: bool> Freeze for Optional<De, AND_THEN>
where De: Freeze,

§

impl<De, const AND_THEN: bool> RefUnwindSafe for Optional<De, AND_THEN>
where De: RefUnwindSafe,

§

impl<De, const AND_THEN: bool> Send for Optional<De, AND_THEN>
where De: Send,

§

impl<De, const AND_THEN: bool> Sync for Optional<De, AND_THEN>
where De: Sync,

§

impl<De, const AND_THEN: bool> Unpin for Optional<De, AND_THEN>
where De: Unpin,

§

impl<De, const AND_THEN: bool> UnwindSafe for Optional<De, AND_THEN>
where De: UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more