use serde::{Deserialize, Serialize};
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct ForkConfig {
pub title: String,
#[serde(skip_serializing_if = "String::is_empty")]
pub logo: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub footer: Option<String>,
#[serde(skip_serializing_if = "Source::is_default")]
pub base: Source,
#[serde(skip_serializing_if = "Source::is_default")]
pub fork: Source,
#[serde(skip_serializing_if = "Section::is_default")]
pub def: Section,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub ignore: Vec<String>,
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Section {
pub title: String,
pub description: String,
pub globs: Vec<String>,
#[serde(skip_serializing_if = "Vec::is_empty")]
pub sub: Vec<Box<Section>>,
}
impl Section {
pub fn is_default(&self) -> bool {
self == &Section::default()
}
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct Source {
pub name: String,
pub description: String,
#[serde(flatten)]
pub config: SourceConfig,
}
impl Source {
pub fn is_default(&self) -> bool {
self == &Source::default()
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(untagged)]
pub enum SourceConfig {
Local(String),
Git(GitSource),
}
impl Default for SourceConfig {
fn default() -> Self {
SourceConfig::Git(GitSource::default())
}
}
#[derive(Default, Debug, Clone, PartialEq, Serialize, Deserialize)]
#[serde(default)]
pub struct GitSource {
pub url: String,
pub r#ref: String,
pub branch: String,
}