dok 0.2.0

A Docker Registry CLI
use clap;
use serde_json;

use api::Api;
use error::DokResult;

pub fn list(matches: &clap::ArgMatches) -> DokResult<()> {
    // We can unwrap here because we have .required(true) set on this
    // argument in clap, so we can depend on that.
    let reg = Api::new(matches.value_of("REGISTRY").unwrap())?;

    #[derive(Deserialize)]
    struct CatalogResponse {
        repositories: Vec<String>,
    }

    let repos_json = reg.catalog()?;
    let parsed: CatalogResponse = serde_json::from_str(&repos_json)?;

    for repo in &parsed.repositories {
        println!("{}", repo);
    }

    Ok(())
}

pub fn tags(matches: &clap::ArgMatches) -> DokResult<()> {
    // We can unwrap here because we have .required(true) set on this
    // argument in clap, so we can depend on that.
    let reg = Api::new(matches.value_of("IMAGE").unwrap())?;

    #[derive(Deserialize)]
    struct TagsResponse {
        tags: Vec<String>,
    }

    let tags_json = reg.tags()?;
    let parsed: TagsResponse = serde_json::from_str(&tags_json)?;

    for tag in &parsed.tags {
        println!("{}", tag);
    }

    Ok(())
}