1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
use serde::Deserialize;
/// Holds a description of top-level content files which simply group other asset files for ease of
/// use.
#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct Content {
compression: Option<CompressionType>,
// Brotli-specific compression parameter
#[serde(rename = "buffer-size")]
buffer_size: Option<usize>,
// Brotli-specific compression parameter
quality: Option<u32>,
// Brotli-specific compression parameter
#[serde(rename = "window-size")]
window_size: Option<u32>,
// Tables must follow values
#[serde(rename = "group")]
groups: Box<[Group]>,
}
impl Content {
/// An iterator of grouped content file descriptions.
#[allow(unused)]
pub fn groups(&self) -> impl Iterator<Item = &Group> {
self.groups.iter()
}
// pub(crate) fn compression(&self) -> Option<Compression> {
// self.compression.map(|compression| match compression {
// CompressionType::Brotli => Compression::Brotli(BrotliParams {
// buffer_size: self
// .buf_size
// .unwrap_or_else(|| BrotliParams::default().buf_size),
// quality: self
// .quality
// .unwrap_or_else(|| BrotliParams::default().quality),
// window_size: self
// .window_size
// .unwrap_or_else(|| BrotliParams::default().window_size),
// }),
// CompressionType::Snap => Compression::Snap,
// })
// }
}
#[derive(Clone, Copy, Debug, Deserialize, Eq, Hash, PartialEq)]
pub enum CompressionType {
/// Higher compression ratio but slower to decode and encode.
#[serde(rename = "brotli")]
Brotli,
/// Lower compression ratio but faster to decode and encode.
#[serde(rename = "snap")]
Snap,
}
/// Holds a description of asset files.
#[derive(Clone, Debug, Deserialize, Eq, Hash, PartialEq)]
pub struct Group {
assets: Vec<String>,
enabled: Option<bool>,
}
impl Group {
/// Individual asset file specification globs.
///
/// May be a filename, might be folder/**/other.jpeg
#[allow(unused)]
pub fn asset_globs(&self) -> impl Iterator<Item = &String> {
self.assets.iter()
}
/// Allows a group to be selectively removed with a single flag, as opposed to physically
/// removing a group from the content file.
///
/// This is useful for debugging.
#[allow(unused)]
pub fn enabled(&self) -> bool {
self.enabled.unwrap_or(true)
}
}