#![ cfg_attr( not( feature = "use_std" ), no_std ) ]
#![ doc( html_logo_url = "https://raw.githubusercontent.com/Wandalen/wTools/master/asset/img/logo_v3_trans_square.png" ) ]
#![ doc( html_favicon_url = "https://raw.githubusercontent.com/Wandalen/wTools/alpha/asset/img/logo_v3_trans_square_icon_small_v2.ico" ) ]
#![ doc( html_root_url = "https://docs.rs/woptions_meta/latest/woptions_meta/" ) ]
#![ warn( rust_2018_idioms ) ]
#![ warn( missing_debug_implementations ) ]
#![ warn( missing_docs ) ]

//!
//! Mechanism to define map of options for a fuction and its defaults laconically.
//!

#![ doc = include_str!( concat!( env!( "CARGO_MANIFEST_DIR" ), "/Readme.md" ) ) ]

// extern crate proc_macro_tools;
// mod former;
#[ cfg( feature = "use_std" ) ]
mod options;

// ///
// /// Attribute macro to generate options adapter and its implementation for structure option.
// ///
//
// #[ allow( non_snake_case ) ]
// #[ proc_macro_attribute ]
// pub fn Options( attr : proc_macro::TokenStream, item : proc_macro::TokenStream ) -> proc_macro::TokenStream
// {
//   let result = options::options( attr, item );
//   match result
//   {
//     Ok( stream ) => stream.into(),
//     Err( err ) => err.to_compile_error().into(),
//   }
// }

///
/// Function-like macro to generate options adapter and its implementation for structure option.
///

#[ cfg( feature = "use_std" ) ]
#[ allow( non_snake_case ) ]
#[ proc_macro ]
pub fn Options( item : proc_macro::TokenStream ) -> proc_macro::TokenStream
{
  let attr = proc_macro::TokenStream::new();
  let result = options::options( attr, item );
  match result
  {
    Ok( stream ) => stream.into(),
    Err( err ) => err.to_compile_error().into(),
  }
}
