kubeclient 0.1.0

An ergonomic Kubernetes API client to manage Kubernetes resources
Documentation
use super::*;
use std::collections::BTreeMap;
use base64;

pub(crate) static SECRET_INFO: KindInfo = KindInfo {
    plural: "secrets",
    default_namespace: Some("default"),
    api: V1_API,
};

#[derive(Serialize, Deserialize, Debug)]
pub struct Secret {
    data: BTreeMap<String, String>,
    metadata: Metadata,
}

impl Secret {
    pub fn new(name: &str) -> Secret {
        let data = BTreeMap::new();
        let metadata = Metadata{ name: Some(name.to_owned()), ..Default::default() };
        Secret { data, metadata }
    }

    pub fn insert<K,V>(&mut self, name: K, secret: V) -> &mut Secret
    where K: Into<String>,
          V: AsRef<[u8]>,
    {
        self.data.insert(name.into(), base64::encode(secret.as_ref()));
        self
    }

    pub fn append<M, K, V>(&mut self, map: M) -> &mut Secret
    where K: Into<String>,
          V: AsRef<[u8]>,
          M: IntoIterator<Item=(K, V)>
    {
        let mut encoded_map = map.into_iter()
            .map(|(k,v)| (k.into(), base64::encode(v.as_ref())))
            .collect();
        self.data.append(&mut encoded_map);
        self
    }

    pub fn get<K>(&self, name: K) -> Option<Vec<u8>>
    where K: AsRef<str>
    {
        self.data.get(name.as_ref())
            .map(|raw| base64::decode(&raw).expect("BUG: secret wasn't base64 encoded"))
    }
}

impl Resource for Secret {
    fn kind() -> Kind { Kind::Secret }
}