teo 0.0.52-beta.3

REDEFINED HTTP server framework.
Documentation
use crate::core::r#enum::{Enum, EnumChoice};

pub struct EnumChoiceBuilder {
    name: String,
    localized_name: String,
    description: String,
}

impl EnumChoiceBuilder {
    pub(crate) fn new(name: impl Into<String>) -> Self {
        EnumChoiceBuilder {
            name: name.into(),
            localized_name: "".into(),
            description: "".into()
        }
    }

    pub fn localized_name(&mut self, name: impl Into<String>) -> &mut Self {
        self.localized_name = name.into();
        self
    }

    pub fn description(&mut self, description: impl Into<String>) -> &mut Self {
        self.description = description.into();
        self
    }
}

pub struct EnumBuilder {
    name: String,
    localized_name: String,
    description: String,
    choices: Vec<EnumChoiceBuilder>
}

impl EnumBuilder {
    pub(crate) fn new(name: impl Into<String>) -> Self {
        EnumBuilder {
            name: name.into(),
            localized_name: "".into(),
            description: "".into(),
            choices: vec![]
        }
    }

    pub fn localized_name(&mut self, name: impl Into<String>) -> &mut Self {
        self.localized_name = name.into();
        self
    }

    pub fn description(&mut self, description: impl Into<String>) -> &mut Self {
        self.description = description.into();
        self
    }

    pub fn choice<F: Fn(&mut EnumChoiceBuilder)>(&mut self, value: impl Into<String>, build: F) -> &mut Self {
        let mut choice = EnumChoiceBuilder::new(value.into());
        build(&mut choice);
        self.choices.push(choice);
        self
    }
}

impl Into<EnumChoice> for EnumChoiceBuilder {
    fn into(self) -> EnumChoice {
        EnumChoice {
            name: self.name.clone(),
            localized_name: self.localized_name.clone(),
            description: self.description.clone()
        }
    }
}

impl Into<EnumChoice> for &EnumChoiceBuilder {
    fn into(self) -> EnumChoice {
        EnumChoice {
            name: self.name.clone(),
            localized_name: self.localized_name.clone(),
            description: self.description.clone()
        }
    }
}

impl Into<Enum> for &EnumBuilder {
    fn into(self) -> Enum {
        Enum {
            name: self.name.clone(),
            localized_name: self.localized_name.clone(),
            description: self.description.clone(),
            choices: self.choices.iter().map(|c| c.into()).collect::<Vec<EnumChoice>>(),
            values: self.choices.iter().map(|c| c.name.clone()).collect(),
        }
    }
}

impl Into<Enum> for EnumBuilder {
    fn into(self) -> Enum {
        Enum {
            name: self.name.clone(),
            localized_name: self.localized_name.clone(),
            description: self.description.clone(),
            choices: self.choices.iter().map(|c| c.into()).collect::<Vec<EnumChoice>>(),
            values: self.choices.iter().map(|c| c.name.clone()).collect(),
        }
    }
}