jockey_derive 0.2.0

Implementation of #[derive(JockeyArguments)] for the jockey crate
Documentation
pub struct Struct {
    pub ident: syn::Ident,
    pub fields: Vec<StructField>,
}

impl Struct {
    pub fn new(ident: syn::Ident, fields: Vec<StructField>) -> Self {
        Struct {
            ident: ident,
            fields: fields,
        }
    }
}

pub struct StructField {
    pub ident: syn::Ident,
    pub ty: syn::Type,
    pub long_option: String,
}

impl StructField {
    pub fn new(ident: syn::Ident, ty: syn::Type, long_option: String) -> Self {
        StructField {
            ident: ident,
            ty: ty,
            long_option: long_option,
        }
    }
}

pub fn derive_input_to_struct_def(input: &syn::DeriveInput) -> Struct {
    let struct_ident: syn::Ident = input.ident.clone();

    let syn_struct_fields = match input.data {
        syn::Data::Struct(ref data) => match data.fields {
            syn::Fields::Named(ref fields) => &fields.named,
            _ => panic!("Can only derive JockeyArguments from struct with named fields"),
        }
        _ => panic!("Can only derive JockeyArguments from struct"),
    };

    let mut struct_fields: Vec<StructField> = Vec::new();
    for syn_struct_field in syn_struct_fields {
        let ident = syn_struct_field.ident.clone().unwrap();
        let ty = syn_struct_field.ty.clone();
        let long_option = "--".to_string() + &ident.to_string();

        struct_fields.push(StructField::new(ident, ty, long_option));
    }

    Struct::new(struct_ident, struct_fields)
}