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}