use crate::template;
use anyhow::Result;
use serde::{Deserialize, Serialize};
pub enum Types {
Markdown,
Org,
Pico8,
}
impl Types {
pub fn template(&self) -> &str {
match *self {
Types::Markdown => template::MARKDOWN_TEMPLATE,
Types::Org => template::ORG_TEMPLATE,
Types::Pico8 => template::PICO8_TEMPLATE,
}
}
}
#[derive(Serialize, Deserialize)]
pub struct Props {
#[serde(rename = "title")]
pub title: String,
#[serde(rename = "description")]
pub description: String,
#[serde(rename = "author")]
pub author: String,
#[serde(rename = "date")]
pub date: String,
#[serde(rename = "uuid")]
pub uuid: String,
#[serde(rename = "tags")]
pub tags: Vec<String>,
#[serde(rename = "slug")]
pub slug: String,
}
#[derive(Serialize, Deserialize)]
pub struct Stub {
#[serde(flatten)]
pub props: Props,
#[serde(rename = "stubble_version")]
pub stubble_version: String,
}
pub trait Render {
fn render(&mut self, template: String) -> Result<String>;
}
impl Stub {
pub fn new(props: Props) -> Stub {
let stubble_version = std::env!("CARGO_PKG_VERSION").to_string();
Stub {
props,
stubble_version,
}
}
}