flickr 0.0.1

Rust binding to Flickr API
Documentation

macro_rules! implement_setters {
    ( 
        $self:tt ; 
        $( $mandatory_field_name:ident: $mandatory_field_type:ty ),* ; 
        $( $optional_field_name:ident: $optional_field_type:ty ),*
    ) => {
        $(
            /// Set mandatory $method_name parameter.
            pub fn $mandatory_field_name(&mut $self, value: &$mandatory_field_type) -> &mut Self 
            {
                $self.$mandatory_field_name = value.clone(); 
                $self
            }
        )*
        $(
            /// Set optional $method_name parameter.
            pub fn $optional_field_name(&mut $self, value: &$optional_field_type) -> &mut Self
            {
                $self.$optional_field_name = Some(value.clone()); 
                $self
            }
        )*
    }
}

macro_rules! implement_perform {
    ( 
        $self:tt, $struct_type:ty, $method_name:expr ; 
        $( $mandatory_field_name:ident: $mandatory_field_type:ty ),* ; 
        $( $optional_field_name:ident: $optional_field_type:ty ),*
    ) => {
            /// Make request for $method_name.
            pub fn perform(&'a mut $self) -> Result<$struct_type, FlickrError> {
                let mut p: BTreeMap<&str, String>  = BTreeMap::new();
        $(
                p.insert(stringify!($mandatory_field_name), $self.$mandatory_field_name.to_string().clone());
        )*
        $(
                if let Some(ref value) = $self.$optional_field_name {
                    p.insert(stringify!($optional_field_name), value.to_string().clone());
                }
        )*
                let content = $self.flickr.call_method($method_name, p)?;
                debug!("content: {}", content);
                let r: $struct_type = serde_json::from_str(&content)?;
                debug!("de: {:#?}", r);
                return Ok(r);
            }
            
    }
}