use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct DsxConfig {
    pub name: String,

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

    #[serde(default)]
    #[serde(rename = "remote")]
    pub remote_url: Option<String>,

    #[serde(default)]
    pub binaries: Vec<Binary>,
    // todo!
    // #[serde(default)]
    // pub libraries: Vec<Library>,
}

impl DsxConfig {
    pub fn new(name: &str) -> Self {
        Self {
            name: name.to_string(),
            description: None,
            remote_url: None,
            binaries: Vec::new(),
        }
    }
}

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Binary {
    pub name: String,
    pub path: String,
}

impl Binary {
    pub fn new(name: &str, path: &str) -> Self {
        Self {
            name: name.to_string(),
            path: path.to_string(),
        }
    }
}
