use crate::pack::PackId;
use crate::theme::Theme;
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
use std::path::PathBuf;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct RenderRequest {
pub template_id: String,
#[serde(default)]
pub pack_id: Option<PackId>,
#[serde(default)]
pub title: Option<String>,
#[serde(default)]
pub subtitle: Option<String>,
#[serde(default)]
pub theme: Option<Theme>,
#[serde(default)]
pub components: Vec<serde_json::Value>,
#[serde(default)]
pub assets: HashMap<String, PathBuf>,
#[serde(default)]
pub metadata: HashMap<String, String>,
}
impl RenderRequest {
pub fn new(template_id: impl Into<String>) -> Self {
Self {
template_id: template_id.into(),
pack_id: None,
title: None,
subtitle: None,
theme: None,
components: Vec::new(),
assets: HashMap::new(),
metadata: HashMap::new(),
}
}
}
#[derive(Debug)]
pub enum RenderOutput {
Pdf(Vec<u8>),
#[allow(dead_code)]
Html(String),
}
impl RenderOutput {
pub fn into_bytes(self) -> Vec<u8> {
match self {
RenderOutput::Pdf(bytes) => bytes,
RenderOutput::Html(html) => html.into_bytes(),
}
}
pub fn is_pdf(&self) -> bool {
matches!(self, RenderOutput::Pdf(_))
}
}