caniuse-rs 0.4.1

A command line client for caniuse.com, written in Rust.
use serde::Serialize;

use crate::feature::Feature;

#[derive(Serialize)]
pub struct AlfredItemList {
    pub items: Vec<AlfredItem>,
}

#[derive(Serialize)]
pub struct AlfredItem {
    pub title: String,
    pub subtitle: String,
    pub arg: String,
    pub r#match: String,
}

impl From<Feature> for AlfredItem {
    fn from(feature: Feature) -> Self {
        let match_str = feature.string_for_matching();
        AlfredItem {
            title: feature.title,
            subtitle: feature.description,
            arg: feature.url,
            r#match: match_str,
        }
    }
}

pub fn get_json(features: &[Feature], pretty: &bool) -> Result<String, serde_json::Error> {
    let alfred_items = AlfredItemList {
        items: features
            .iter()
            .map(|feature| AlfredItem::from(feature.to_owned()))
            .collect(),
    };

    match pretty {
        true => serde_json::to_string_pretty(&alfred_items),
        false => serde_json::to_string(&alfred_items),
    }
}