Skip to main content

catapulte_prelude/
lib.rs

1use std::path::PathBuf;
2
3#[derive(Debug, serde::Deserialize, serde::Serialize)]
4pub struct Metadata {
5    pub name: String,
6    #[serde(default, skip_serializing_if = "Option::is_none")]
7    pub description: Option<String>,
8    #[serde(default, skip_serializing_if = "Option::is_none")]
9    pub attributes: Option<serde_json::Value>,
10}
11
12#[derive(Debug, serde::Deserialize, serde::Serialize)]
13pub struct MetadataWithTemplate<T = TemplateDefinition> {
14    #[serde(flatten)]
15    pub inner: Metadata,
16    pub template: T,
17}
18
19#[derive(Debug, serde::Deserialize, serde::Serialize)]
20pub struct LocalTemplateDefinition {
21    pub path: std::path::PathBuf,
22}
23
24impl Default for LocalTemplateDefinition {
25    fn default() -> Self {
26        Self {
27            path: PathBuf::from("template.mjml"),
28        }
29    }
30}
31
32#[derive(Debug, serde::Deserialize, serde::Serialize)]
33pub struct EmbeddedTemplateDefinition {
34    pub content: String,
35}
36
37#[derive(Debug, serde::Deserialize, serde::Serialize)]
38pub struct RemoteTemplateDefinition {
39    pub url: url::Url,
40}
41
42#[derive(Debug, serde::Deserialize, serde::Serialize)]
43#[serde(untagged)]
44pub enum TemplateDefinition {
45    Local(LocalTemplateDefinition),
46    Embedded(EmbeddedTemplateDefinition),
47    Remote(RemoteTemplateDefinition),
48}
49
50impl Default for TemplateDefinition {
51    fn default() -> Self {
52        Self::Local(LocalTemplateDefinition::default())
53    }
54}
55
56#[derive(Debug, serde::Deserialize, serde::Serialize)]
57#[serde(untagged)]
58pub enum Either<A, B> {
59    First(A),
60    Second(B),
61}