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