action-derive 0.0.13

GitHub actions toolkit
Documentation
use std::collections::HashMap;
use std::path::Path;

#[derive(PartialEq, Eq, Hash, Debug, serde::Deserialize)]
pub struct Input {
    pub description: Option<String>,
    #[serde(rename(deserialize = "deprecationMessage"))]
    pub deprecation_message: Option<String>,
    pub default: Option<String>,
    pub required: Option<bool>,
}

#[derive(PartialEq, Eq, Hash, Debug, serde::Deserialize)]
pub struct Output {
    pub description: Option<String>,
}

#[derive(PartialEq, Eq, Hash, Debug, serde::Deserialize)]
pub struct Branding {
    pub icon: Option<String>,
    pub color: Option<String>,
}

#[derive(PartialEq, Eq, Debug, serde::Deserialize)]
pub struct Manifest {
    pub name: Option<String>,
    pub description: Option<String>,
    pub author: Option<String>,
    pub branding: Option<Branding>,

    #[serde(default)]
    pub inputs: HashMap<String, Input>,
    #[serde(default)]
    pub outputs: HashMap<String, Output>,
}

impl Manifest {
    pub fn from_action_yml(path: impl AsRef<Path>) -> Self {
        let file = std::fs::OpenOptions::new()
            .read(true)
            .open(path.as_ref())
            .unwrap();
        let reader = std::io::BufReader::new(file);
        serde_yaml::from_reader(reader).unwrap()
    }
}