Skip to main content

sora_export/
exporter.rs

1use std::path::PathBuf;
2
3use sora_data::localization::LocaleCatalog;
4use sora_data::model::ConfigData;
5use sora_diagnostics::Result;
6use sora_execution::ExecutionContext;
7use sora_ir::model::ConfigIr;
8
9#[derive(Debug, Clone, PartialEq, Eq)]
10pub enum ExportOutput {
11    Directory(PathBuf),
12    File(PathBuf),
13}
14
15#[derive(Debug, Clone, Copy, PartialEq, Eq)]
16pub enum OutputKind {
17    Directory,
18    File,
19}
20
21#[derive(Debug, Clone, Copy, PartialEq, Eq, Default)]
22pub enum ExportCompression {
23    #[default]
24    None,
25    Zstd {
26        level: i32,
27    },
28}
29
30#[derive(Debug, Clone, PartialEq, Eq, Default)]
31pub struct ExportOptions {
32    pub compression: ExportCompression,
33    pub locale: Option<String>,
34}
35
36pub struct ExportRequest<'a> {
37    pub ir: &'a ConfigIr,
38    pub data: &'a ConfigData,
39    pub locale_catalog: Option<&'a LocaleCatalog>,
40    pub execution: &'a ExecutionContext,
41    pub options: ExportOptions,
42    pub output: ExportOutput,
43}
44
45pub trait DataExporter: Send + Sync {
46    fn format_name(&self) -> &'static str;
47    fn output_kind(&self) -> OutputKind;
48    fn export(&self, request: ExportRequest<'_>) -> Result<()>;
49}