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
85
86
use super::cssbuf::CssBuf;
use super::transform::handle_body;
use super::Style;
use crate::file_context::FileContext;
use crate::sass::Item;
use crate::{Error, ScopeRef};
#[derive(Clone, Copy, Debug)]
pub struct Format {
pub style: Style,
pub precision: usize,
}
impl Format {
pub fn introspect() -> Self {
Self {
style: Style::Introspection,
..Default::default()
}
}
pub fn is_compressed(&self) -> bool {
self.style == Style::Compressed
}
pub fn is_introspection(&self) -> bool {
self.style == Style::Introspection
}
pub fn write_root(
&self,
items: &[Item],
globals: ScopeRef,
file_context: &impl FileContext,
) -> Result<Vec<u8>, Error> {
let mut head = CssBuf::new(*self);
let mut body = CssBuf::new(*self);
handle_body(
items,
&mut head,
None,
&mut body,
globals,
file_context,
)?;
Ok(CssBuf::combine_final(head, body))
}
pub fn get_indent(&self, len: usize) -> &'static str {
static INDENT: &str = "\n ";
if self.is_compressed() {
""
} else {
&INDENT[..(len + 1)]
}
}
}
impl Default for Format {
fn default() -> Format {
Format {
style: Style::Expanded,
precision: 10,
}
}
}
pub struct Formatted<'a, T> {
pub(crate) value: &'a T,
pub(crate) format: Format,
}