Skip to main content

OpenEnums

Struct OpenEnums 

Source
pub struct OpenEnums { /* private fields */ }
Available on crate feature open-enums only.
Expand description

The registry of the variants of open enums.

Open enums (see #[deser::open_enum]) are deserialized with the variants registered here, the registry is given to the deserialization in the Context. A registry holds the variants of any number of open enums. Types are variants of an open enum if they implement the trait with #[deser::variant], which register checks:

use deser::{Context, Deserialize, OpenEnums, Serialize};

#[deser::open_enum(tag = "type")]
pub trait Shape: Send + Sync {}

#[derive(Serialize, Deserialize)]
pub struct Circle {
    radius: u32,
}

#[deser::variant]
impl Shape for Circle {}

let mut variants = OpenEnums::new();
variants.register::<dyn Shape, Circle>().unwrap();
let context = Context::with(variants);

Libraries that provide variants usually provide a function that registers them. Only the registered variants can be deserialized, which is also a way to restrict what input can create. Serializing does not need the registry. The variants of untagged open enums are tried in the order they are registered.

Implementations§

Source§

impl OpenEnums

Source

pub fn new() -> OpenEnums

Creates an empty registry.

Source

pub fn register<O: ?Sized + OpenEnum, T: OpenVariant<O>>( &mut self, ) -> Result<&mut OpenEnums, Error>

Registers the type T as variant of the open enum O.

O is the trait object (dyn Trait). Registering a type again does nothing. Fails if the name of the variant (or one of its aliases) is the one of another variant (with ErrorKind::Configuration), unless the open enum is untagged (where the names are only used in descriptions and errors).

Trait Implementations§

Source§

impl Debug for OpenEnums

Source§

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

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

impl Default for OpenEnums

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

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.

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

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

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

Source§

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.