ferment-sys 0.2.14

Syntax tree morphing of FFI-compatible stuff
Documentation
use syn::Type;
use std::fmt::{Debug, Display, Formatter};
use crate::composable::{TypeModel, TypeModeled};
use crate::ext::AsType;

#[derive(Clone)]
pub enum GroupModelKind {
    Result(TypeModel),
    Vec(TypeModel),
    Map(TypeModel),
    BTreeSet(TypeModel),
    HashSet(TypeModel),
    IndexMap(TypeModel),
    IndexSet(TypeModel)
}

impl<'a> AsType<'a> for GroupModelKind {
    fn as_type(&'a self) -> &'a Type {
        self.type_model_ref().as_type()
    }
}

impl TypeModeled for GroupModelKind {
    fn type_model_mut(&mut self) -> &mut TypeModel {
        match self {
            GroupModelKind::Result(model) |
            GroupModelKind::Vec(model) |
            GroupModelKind::Map(model) |
            GroupModelKind::BTreeSet(model) |
            GroupModelKind::HashSet(model) |
            GroupModelKind::IndexMap(model) |
            GroupModelKind::IndexSet(model) => model,
        }
    }

    fn type_model_ref(&self) -> &TypeModel {
        match self {
            GroupModelKind::Result(model) |
            GroupModelKind::Vec(model) |
            GroupModelKind::Map(model) |
            GroupModelKind::BTreeSet(model) |
            GroupModelKind::HashSet(model) |
            GroupModelKind::IndexMap(model) |
            GroupModelKind::IndexSet(model) => model
        }
    }
}

impl Debug for GroupModelKind {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        f.write_fmt(format_args!("{}", match self {
            GroupModelKind::Result(model) =>
                format!("Result({})", model),
            GroupModelKind::Vec(model) =>
                format!("Vec({})", model),
            GroupModelKind::Map(model) =>
                format!("Map({})", model),
            GroupModelKind::BTreeSet(model) =>
                format!("BTreeSet({})", model),
            GroupModelKind::HashSet(model) =>
                format!("HashSet({})", model),
            GroupModelKind::IndexMap(model) =>
                format!("IndexMap({})", model),
            GroupModelKind::IndexSet(model) =>
                format!("IndexSet({})", model),
        }))
    }
}

impl Display for GroupModelKind {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        std::fmt::Debug::fmt(self, f)
    }
}