assetpack_core/file_transform/
config.rs1use 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}