Documentation
use proc_macro2::{TokenStream, Ident};
use quote::{quote, ToTokens};
use syn::Field;

#[derive(Debug, Clone)]
pub struct StructField{
  pub name: Ident
}

impl StructField{
  pub fn parse(field: &Field) -> Option<Self>{
    match &field.ident{
        Some(name) =>     
          Some(
            Self { 
              name: name.clone()
            }
          ),
        None => None,
    }
  }
}

impl ToTokens for StructField{
    fn to_tokens(&self, tokens: &mut TokenStream) {
      let name = &self.name;
      tokens.extend(quote! {
          #name
      });
    }
}

// impl StructField{
//   pub fn new(field: &Field) -> Option<Self>{
//     let name = Self::get_name(field);

//     match name {
//       Some(name) => {
//         Some(Self { 
//           name
//         })
//       },
//       None => None
//     }

//   }
//   fn get_name(field: &Field) -> Option<Ident>{
//     match field.ident.clone(){
//         Some(name) => Some(name),
//         None => None,
//     }
//   }
// }

// impl ToTokens for StructField{
//     fn to_tokens(&self, tokens: &mut TokenStream) {
//       let name = &self.name;
//       quote!{
//         #name
//       };

//       tokens.extend(quote! {
//         {
//           #name
//         }
//        });
//     }
// }