use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
mod artifacts;
mod changelog;
mod funding;
mod mdbooks;
use crate::config::components::changelog::{ChangelogConfig, ChangelogLayer};
pub use artifacts::{ArtifactsConfig, ArtifactsLayer, PackageManagersConfig, PackageManagersLayer};
pub use funding::{FundingConfig, FundingLayer};
pub use mdbooks::{MdBookConfig, MdBookLayer};
use super::{ApplyBoolLayerExt, ApplyLayer, ApplyOptExt, BoolOr};
#[derive(Debug, Clone)]
pub struct ComponentConfig {
pub changelog: Option<ChangelogConfig>,
pub mdbook: Option<MdBookConfig>,
pub funding: Option<FundingConfig>,
pub artifacts: Option<ArtifactsConfig>,
pub source: Option<ReleasesSource>,
}
#[derive(Debug, Serialize, Deserialize, JsonSchema)]
#[serde(deny_unknown_fields)]
pub struct ComponentLayer {
pub changelog: Option<BoolOr<ChangelogLayer>>,
pub mdbook: Option<BoolOr<MdBookLayer>>,
pub funding: Option<BoolOr<FundingLayer>>,
pub artifacts: Option<BoolOr<ArtifactsLayer>>,
pub source: Option<ReleasesSource>,
}
#[derive(Serialize, Deserialize, Clone, Debug, JsonSchema)]
#[serde(rename_all = "lowercase")]
pub enum ReleasesSource {
GitHub,
Axodotdev,
}
impl Default for ComponentConfig {
fn default() -> Self {
ComponentConfig {
changelog: Some(ChangelogConfig::default()),
mdbook: Some(MdBookConfig::default()),
funding: Some(FundingConfig::default()),
artifacts: Some(ArtifactsConfig::default()),
source: Some(ReleasesSource::GitHub),
}
}
}
impl ApplyLayer for ComponentConfig {
type Layer = ComponentLayer;
fn apply_layer(&mut self, layer: Self::Layer) {
let ComponentLayer {
changelog,
mdbook,
funding,
artifacts,
source,
} = layer;
self.changelog.apply_bool_layer(changelog);
self.mdbook.apply_bool_layer(mdbook);
self.funding.apply_bool_layer(funding);
self.artifacts.apply_bool_layer(artifacts);
self.source.apply_opt(source);
}
}
impl ComponentConfig {
pub fn artifacts_enabled(&self) -> bool {
self.artifacts
.as_ref()
.map(|a| a.has_some())
.unwrap_or(false)
}
}