blob: 224262420f8d53c6c352ccd1da8dd14cf803b1df (
plain)
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
87
88
89
90
91
92
93
|
pub struct RenderOptions {
initial_header_level: u8,
}
impl Default for RenderOptions {
fn default() -> Self {
RenderOptions {
initial_header_level: 0,
}
}
}
pub trait RenderOptionsBuilder {
fn initial_header_level(&self) -> u8;
fn with_initial_header_level(&mut self, lvl: u8) -> &mut Self;
}
impl RenderOptionsBuilder for RenderOptions {
fn initial_header_level(&self) -> u8 {
self.initial_header_level
}
fn with_initial_header_level(&mut self, lvl: u8) -> &mut Self {
self.initial_header_level = lvl;
self
}
}
// standalone document formats
pub struct RenderOptionsStandalone {
render_options: RenderOptions,
standalone: bool,
}
impl Default for RenderOptionsStandalone {
fn default() -> Self {
RenderOptionsStandalone {
render_options: Default::default(),
standalone: true,
}
}
}
pub trait RenderOptionsStandaloneBuilder {
fn into_render_options(self) -> RenderOptions;
fn render_options(&self) -> &RenderOptions;
fn render_options_mut(&mut self) -> &mut RenderOptions;
fn standalone(&self) -> bool;
fn with_standalone(&mut self, standalone: bool) -> &mut Self;
}
impl<T> RenderOptionsBuilder for T where T: RenderOptionsStandaloneBuilder {
fn initial_header_level(&self) -> u8 {
self.render_options().initial_header_level()
}
fn with_initial_header_level(&mut self, lvl: u8) -> &mut Self {
self.render_options_mut().with_initial_header_level(lvl);
self
}
}
impl RenderOptionsStandaloneBuilder for RenderOptionsStandalone {
fn into_render_options(self) -> RenderOptions {
self.render_options
}
fn render_options(&self) -> &RenderOptions {
&self.render_options
}
fn render_options_mut(&mut self) -> &mut RenderOptions {
&mut self.render_options
}
fn standalone(&self) -> bool {
self.standalone
}
fn with_standalone(&mut self, standalone: bool) -> &mut Self {
self.standalone = standalone;
self
}
}
impl From<bool> for RenderOptionsStandalone {
fn from(standalone: bool) -> Self {
let mut r: RenderOptionsStandalone = Default::default();
r.with_standalone(standalone);
r
}
}
impl<T> From<T> for RenderOptions where T: RenderOptionsStandaloneBuilder {
fn from(opts: T) -> Self {
opts.into_render_options()
}
}
|