1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
#[macro_use] extern crate log; #[macro_use] extern crate quick_error; extern crate rustc_serialize; extern crate unicase; extern crate traitobject; pub mod error; pub mod result; pub mod field; pub mod config; mod item; mod cowstr; pub use config::Config; pub use field::Field; #[macro_export] macro_rules! config_field { ($(#[$attr:meta])* struct $id:ident: $t:ty, key: $key:expr) => { __config_field!($(#[$attr])* field $id, $key, $t); }; ($(#[$attr:meta])* struct $id:ident: $t:ty, key: $key:expr, default: $def:expr) => { __config_field!($(#[$attr])* field $id, $key, $t); __config_field_default!($id, $def); }; } #[doc(hidden)] #[macro_export] macro_rules! __config_field { ($(#[$attr:meta])* field $id:ident, $key:expr, $t:ty) => { $(#[$attr])* #[derive(Debug, Clone)] pub struct $id(pub $t); impl ::jconfig::field::Field for $id { fn key() -> &'static str { $key } fn decode(raw: &::jconfig::field::RawValue) -> ::jconfig::result::Result<Self> { ::jconfig::field::decode(raw).map(|x| $id(x)) } fn encode(&self) -> ::jconfig::field::RawValue { ::jconfig::field::encode(&self.0) } } impl ::std::fmt::Display for $id { fn fmt(&self, f: &mut ::std::fmt::Formatter) -> ::std::fmt::Result { write!(f, "{}", self.0) } } } } #[doc(hidden)] #[macro_export] macro_rules! __config_field_default { ($id:ident, $def:expr) => { impl Default for $id { fn default() -> Self { $id($def) } } } }