diff options
Diffstat (limited to 'renderer/src/opt.rs')
| -rw-r--r-- | renderer/src/opt.rs | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/renderer/src/opt.rs b/renderer/src/opt.rs new file mode 100644 index 0000000..2242624 --- /dev/null +++ b/renderer/src/opt.rs @@ -0,0 +1,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() + } +} |
