fastn-resolved 0.1.0

fastn: Full-stack Web Development Made Easy
Documentation
#[derive(Debug, Default, Clone, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct Record {
    pub name: String,
    pub fields: Vec<fastn_resolved::Field>,
    pub line_number: usize,
}

impl Record {
    pub fn new(name: &str, fields: Vec<Field>, line_number: usize) -> Record {
        Record {
            name: name.to_string(),
            fields,
            line_number,
        }
    }
}
#[derive(Debug, Clone, PartialEq, serde::Deserialize, serde::Serialize)]
pub struct Field {
    pub name: String,
    pub kind: fastn_resolved::KindData,
    pub mutable: bool,
    pub value: Option<fastn_resolved::PropertyValue>,
    pub line_number: usize,
    pub access_modifier: AccessModifier,
}

impl Field {
    pub fn new(
        name: &str,
        kind: fastn_resolved::KindData,
        mutable: bool,
        value: Option<fastn_resolved::PropertyValue>,
        line_number: usize,
    ) -> Field {
        Field {
            name: name.to_string(),
            kind,
            mutable,
            value,
            line_number,
            access_modifier: Default::default(),
        }
    }

    pub fn to_sources(&self) -> Vec<fastn_resolved::PropertySource> {
        let mut sources = vec![fastn_resolved::PropertySource::Header {
            name: self.name.to_string(),
            mutable: self.mutable,
        }];
        if self.is_caption() {
            sources.push(fastn_resolved::PropertySource::Caption);
        }

        if self.is_body() {
            sources.push(fastn_resolved::PropertySource::Body);
        }

        if self.is_subsection_ui() {
            sources.push(fastn_resolved::PropertySource::Subsection);
        }

        sources
    }

    pub fn default(name: &str, kind: fastn_resolved::KindData) -> fastn_resolved::Field {
        fastn_resolved::Field {
            name: name.to_string(),
            kind,
            mutable: false,
            value: None,
            line_number: 0,
            access_modifier: Default::default(),
        }
    }

    pub fn default_with_value(
        name: &str,
        kind: fastn_resolved::KindData,
        value: fastn_resolved::PropertyValue,
    ) -> Field {
        Field {
            name: name.to_string(),
            kind,
            mutable: false,
            value: Some(value),
            line_number: 0,
            access_modifier: Default::default(),
        }
    }

    pub fn is_caption(&self) -> bool {
        self.kind.caption
    }

    pub fn is_subsection_ui(&self) -> bool {
        self.kind.kind.clone().inner_list().is_subsection_ui()
    }

    pub fn is_body(&self) -> bool {
        self.kind.body
    }

    pub fn is_value_required(&self) -> bool {
        if self.kind.is_optional() || self.kind.is_list() {
            return false;
        }
        self.value.is_none()
    }
}

#[derive(Debug, Default, PartialEq, Clone, serde::Serialize, serde::Deserialize)]
pub enum AccessModifier {
    #[default]
    Public,
    Private,
}

impl AccessModifier {
    pub fn is_public(&self) -> bool {
        matches!(self, AccessModifier::Public)
    }
}