use std::collections::BTreeMap;
use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::templates::engine::{TemplateDescriptor, TemplateProvenance, TokenMap};
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, PartialEq, Eq)]
pub enum ScratchPadProfileKind {
Ref,
Feat,
Fix,
Revision,
}
impl ScratchPadProfileKind {
pub fn slug(&self) -> &'static str {
match self {
Self::Ref => "ref",
Self::Feat => "feat",
Self::Fix => "fix",
Self::Revision => "revision",
}
}
}
impl Default for ScratchPadProfileKind {
fn default() -> Self {
Self::Ref
}
}
#[derive(Clone, Debug, Serialize, Deserialize, JsonSchema, Default)]
pub struct ScratchPadProfile {
pub kind: ScratchPadProfileKind,
#[serde(default)]
pub name: String,
pub template: TemplateDescriptor,
#[serde(skip_serializing_if = "Option::is_none")]
pub provenance: Option<TemplateProvenance>,
#[serde(default)]
pub configuration: BTreeMap<String, serde_json::Value>,
}
impl ScratchPadProfile {
pub fn slug(&self) -> &str {
if self.name.is_empty() {
self.kind.slug()
} else {
&self.name
}
}
pub fn token_map(&self) -> TokenMap {
self.configuration
.iter()
.map(|(k, v)| (k.clone(), v.clone()))
.collect()
}
}