Skip to main content

sora_export/
exporter.rs

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}