configlation 0.1.1

Generate configuration from inputs and template
Documentation
use std::path::PathBuf;

use serde::Deserialize;

#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Config {
    pub title: String,

    #[serde(default, rename = "input")]
    pub inputs: Vec<Input>,

    #[serde(default, rename = "output")]
    pub outputs: Vec<Output>,
}

#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
pub struct Input {
    pub name: String,

    #[serde(default)]
    pub kind: InputKind,
    pub default: Option<String>,
    pub description: Option<String>,
}

#[derive(Default, Debug, Deserialize)]
#[serde(deny_unknown_fields)]
#[serde(rename_all = "snake_case")]
pub enum InputKind {
    #[default]
    String,
    Secret,
}

#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
#[serde(rename_all = "snake_case", tag = "kind")]
pub enum Output {
    File {
        path: PathBuf,
        contents: Contents,
    },
}

#[derive(Debug, Deserialize)]
#[serde(deny_unknown_fields)]
#[serde(untagged)]
pub enum Contents {
    String(String),
    List(Vec<String>),
}