Skip to content
Snippets Groups Projects
config.rs 2.31 KiB
Newer Older
use rocket::serde::{uuid::Uuid, Serialize};
use schemars::JsonSchema;
use std::collections::HashMap;
use uuid::Uuid;

use crate::Error;

#[derive(Serialize, JsonSchema)]
#[serde(crate = "rocket::serde")]
pub struct ConfigNode {
    pub software: String,
    pub version: String,
    pub jobs: HashMap<String, Uuid>
}

impl ConfigNode {
    pub fn new(software: String, version: String) -> ConfigNode {
        ConfigNode {
            software,
            version,
            jobs: HashMap<String, Uuid>::new()
        }
    }
}

#[derive(Serialize, JsonSchema)]
#[serde(crate = "rocket::serde")]
pub struct Configs {
    pub softwares: Vec<ConfigNode>
}

impl Configs {
    pub fn new() -> Configs {
        Configs {
            softwares: Vec<ConfigNode>::new()
        }
    }
}

#[derive(Serialize, JsonSchema)]
#[serde(crate = "rocket::serde")]
pub struct JobConfCommandParam {
    pub name: String,
    pub value_type: String,
    pub default_value: Option<String>,
    pub comment: Option<String>,
    pub required: bool,
    pub named: bool,
    pub parameter_name: Option<String>
}

impl TryFrom<adapters::constants::JobConfCommandParam> for JobConfCommandParam {
    type Error = Error;
    fn try_from(value: adapters::constants::JobConfCommandParam) -> Result<Self, Self::Error> {
        Ok(Self {
            name: value.name,
            value_type: value.value_type.to_string(),
            default_value: value.default_value,
            comment: value.comment,
            required: value.required,
            named: value.named,
            parameter_name: value.parameter_name
        })
    }
}

#[derive(Serialize, JsonSchema)]
#[serde(crate = "rocket::serde")]
pub struct JobConfCommand {
    #[serde(skip, default = "get_uuid")]
    pub uuid: Uuid,
    pub bin: String,
    pub parameters: Vec<JobConfCommandParam>
}

impl TryFrom<adapters::constants::JobConfCommand> for JobConfCommand {
    type Error = Error;
    fn try_from(value: adapters::constants::JobConfCommand) -> Result<Self, Self::Error> {
        let mut converted_parameters = Vec<JobConfCommandParam>::new();
        for param in value.parameters {
            converted_parameters.push(JobConfCommandParam::from(param))
        }
        Ok(Self {
            uuid: value.uuid,
            bin: bin.uuid,
            parameters: converted_parameters
        })
    }
}