songkick 0.1.0

Rust library for SongKick API

use url::percent_encoding::{QUERY_ENCODE_SET, utf8_percent_encode};

define_encode_set! {
    pub SK_ENCODE_SET = [QUERY_ENCODE_SET] | {'-'}
}

pub fn encode(src: &str) -> String {
    utf8_percent_encode(src, SK_ENCODE_SET).collect::<String>()
}



pub mod json {
    use serde_json::value::Map;
    use serde_json::Value;
    use error::SkError;
    use SkResult;


    pub fn get_str(obj: &Map<String, Value>, field: &str) -> SkResult<String> {
        obj.get(field)
            .and_then(|val| val.as_str())
            .map(String::from)
            .ok_or(SkError::JsonError(format!("Failed to deserialize JSON artist object: missing field {}", field)))
    }

    pub fn get_u64(obj: &Map<String, Value>, field: &str) -> SkResult<u64> {
        obj.get(field)
            .and_then(|val| val.as_u64())
            .ok_or(SkError::JsonError(format!("Failed to deserialize JSON artist object: missing field {}", field)))
    }

    pub fn get_f64(obj: &Map<String, Value>, field: &str) -> SkResult<f64> {
        obj.get(field)
            .and_then(|val| val.as_f64())
            .ok_or(SkError::JsonError(format!("Failed to deserialize JSON artist object: missing field {}", field)))
    }

    pub fn get_arr<'a>(obj: &'a Map<String, Value>, field: &str) -> SkResult<&'a Vec<Value>> {
        obj.get(field)
            .and_then(|val| val.as_array())
            .ok_or(SkError::JsonError(format!("Failed to deserialize JSON artist object: missing field {}", field)))
    }
}