cd 0.3.1

API interaction for clearlydefined.io
Documentation
use nu_ansi_term::Color;

fn main() -> Result<(), anyhow::Error> {
    let client = cd::client::Client::new();

    let get_reqs = cd::definitions::get(
        10,
        std::env::args().skip(1).filter_map(|arg| arg.parse().ok()),
    );

    for get_req in get_reqs {
        let get_res = client.execute::<cd::definitions::GetResponse>(get_req)?;

        for def in get_res.definitions {
            match def.described {
                Some(_desc) => {
                    println!("{} - {}", def.coordinates, def.scores.effective);
                    if let Some(lic) = def.licensed {
                        println!(
                            "\tDeclared {} - Discovered {:?}",
                            lic.declared, lic.facets.core.discovered.expressions
                        );
                    }

                    for file in def.files {
                        if let Some(license) = file.license {
                            let color = Color::Green;
                            let color = if file.natures.iter().any(|s| s == "license") {
                                color.bold()
                            } else {
                                color.dimmed()
                            };
                            println!("\tlicense: {} path: {}", color.paint(license), file.path);
                        }
                    }
                }
                None => println!(
                    "{} not harvested",
                    Color::Red.paint(def.coordinates.to_string())
                ),
            }
        }
    }

    Ok(())
}