use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use super::{ApplyLayer, ApplyOptExt, ApplyValExt};
#[derive(Debug, Clone)]
pub struct ProjectConfig {
pub name: String,
pub version: Option<String>,
pub description: Option<String>,
pub homepage: Option<String>,
pub repository: Option<String>,
pub readme_path: String,
pub license: Option<String>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct ProjectLayer {
pub name: Option<String>,
pub version: Option<String>,
pub description: Option<String>,
pub homepage: Option<String>,
pub repository: Option<String>,
pub readme_path: Option<String>,
pub license: Option<String>,
}
impl Default for ProjectConfig {
fn default() -> Self {
ProjectConfig {
name: "My Oranda Project".to_owned(),
version: None,
description: None,
homepage: None,
repository: None,
readme_path: "README.md".to_owned(),
license: None,
}
}
}
impl ApplyLayer for ProjectConfig {
type Layer = ProjectLayer;
fn apply_layer(&mut self, layer: Self::Layer) {
let ProjectLayer {
name,
version,
description,
homepage,
repository,
readme_path,
license,
} = layer;
self.name.apply_val(name);
self.version.apply_opt(version);
self.description.apply_opt(description);
self.homepage.apply_opt(homepage);
self.repository.apply_opt(repository);
self.readme_path.apply_val(readme_path);
self.license.apply_opt(license);
}
}