flexpiler_derive 0.2.0

Derive macro project for main crate 'flexpiler'
Documentation
use crate::core::definition;
use crate::core::error;


pub struct Struct<'a> {
    pub ident_string: std::string::String,
    pub field_ident_vec: Vec<&'a syn::Ident>,
    pub field_string_vec: Vec<std::string::String>,
    pub field_type_vec: Vec<&'a syn::Type>,
}


impl<'a> std::convert::TryFrom<&'a definition::Struct> for Struct<'a> {
    type Error = error::Error<'a>;

    fn try_from(struct_definition_ref: &'a definition::Struct) -> std::result::Result<Self, Self::Error> {
        let mut field_ident_vec = Vec::new();
        let mut field_string_vec = Vec::new();
        let mut field_type_vec = Vec::new();
        for field_ref in struct_definition_ref.data_struct.fields.iter() {
            let field_ident_ref = match &field_ref.ident {
                &Some(ref value_ref) => value_ref,
                &None => {
                    return Err(
                        Self::Error::StructFieldUnnamed{
                            field_ref,
                        },
                    )
                }
            };

            field_ident_vec.push(field_ident_ref);
            field_string_vec.push(format!("{}", field_ident_ref));
            field_type_vec.push(&field_ref.ty );
        }

        Ok(Struct {
            ident_string: struct_definition_ref.ident.to_string(),
            field_ident_vec,
            field_string_vec,
            field_type_vec,
        })
    }
}