Skip to main content

assetpack_core/file_transform/
config.rs

1use std::path::{Path, PathBuf};
2
3#[derive(Debug, Clone, serde::Deserialize)]
4#[serde(default)]
5pub struct FileTransformConfig {
6  pub enabled: bool,
7  pub min_size: u64,
8  pub min_gain: f64,
9  pub allow_ext: Vec<String>,
10  pub max_in_memory_bytes: u64,
11  pub max_transform_bytes: u64,
12  pub spill_to_disk: bool,
13  pub temp_dir: Option<PathBuf>,
14  pub eval: FileTransformEvalConfig,
15  pub precomp2: FileTransformPrecomp2Config,
16  pub precomp2_zstd: FileTransformPrecomp2ZstdConfig,
17  pub precomp2_lzma: FileTransformPrecomp2LzmaConfig,
18}
19
20impl Default for FileTransformConfig {
21  fn default() -> Self {
22    Self {
23      enabled: true,
24      min_size: 32 * 1024,
25      min_gain: 0.01,
26      allow_ext: vec![
27        "png".into(),
28        "zip".into(),
29        "gz".into(),
30        "pdf".into(),
31        "docx".into(),
32        "xlsx".into(),
33        "pptx".into(),
34        "svgz".into(),
35      ],
36      max_in_memory_bytes: 100 * 1024 * 1024,
37      max_transform_bytes: 1024 * 1024 * 1024,
38      spill_to_disk: true,
39      temp_dir: Some(PathBuf::from(".assetcache/tmp")),
40      eval: FileTransformEvalConfig::default(),
41      precomp2: FileTransformPrecomp2Config::default(),
42      precomp2_zstd: FileTransformPrecomp2ZstdConfig::default(),
43      precomp2_lzma: FileTransformPrecomp2LzmaConfig::default(),
44    }
45  }
46}
47
48impl FileTransformConfig {
49  pub fn resolved_temp_dir(&self, root: &Path) -> Option<PathBuf> {
50    let dir = self.temp_dir.as_ref()?;
51    if dir.as_os_str().is_empty() {
52      return None;
53    }
54    if dir.is_absolute() {
55      Some(dir.clone())
56    } else {
57      Some(root.join(dir))
58    }
59  }
60}
61
62#[derive(Debug, Clone, serde::Deserialize)]
63#[serde(default)]
64pub struct FileTransformEvalConfig {
65  pub max_buffer_bytes: u64,
66  pub estimator_zstd_level: i32,
67}
68
69impl Default for FileTransformEvalConfig {
70  fn default() -> Self {
71    Self {
72      max_buffer_bytes: 100 * 1024 * 1024,
73      estimator_zstd_level: 5,
74    }
75  }
76}
77
78#[derive(Debug, Clone, serde::Deserialize)]
79#[serde(default)]
80pub struct FileTransformPrecomp2Config {
81  pub enabled: bool,
82  pub max_depth: u32,
83  pub max_expand_ratio: f64,
84  pub max_total_output: u64,
85  pub recover: bool,
86}
87
88impl Default for FileTransformPrecomp2Config {
89  fn default() -> Self {
90    Self {
91      enabled: true,
92      max_depth: 4,
93      max_expand_ratio: 16.0,
94      max_total_output: 1 << 32,
95      recover: false,
96    }
97  }
98}
99
100#[derive(Debug, Clone, serde::Deserialize)]
101#[serde(default)]
102pub struct FileTransformPrecomp2ZstdConfig {
103  pub enabled: bool,
104  pub level: i32,
105}
106
107impl Default for FileTransformPrecomp2ZstdConfig {
108  fn default() -> Self {
109    Self { enabled: true, level: 6 }
110  }
111}
112
113#[derive(Debug, Clone, serde::Deserialize)]
114#[serde(default)]
115pub struct FileTransformPrecomp2LzmaConfig {
116  pub enabled: bool,
117  pub preset: u8,
118  pub dict_size: usize,
119}
120
121impl Default for FileTransformPrecomp2LzmaConfig {
122  fn default() -> Self {
123    Self {
124      enabled: true,
125      preset: 6,
126      dict_size: 64 * 1024 * 1024,
127    }
128  }
129}