raui_ron_renderer/
lib.rs

1use raui_core::{
2    layout::{CoordsMapping, Layout},
3    renderer::Renderer,
4    widget::unit::WidgetUnit,
5};
6use ron::ser::PrettyConfig;
7use serde::{Deserialize, Serialize};
8use std::str::FromStr;
9
10#[derive(Debug, Default, Clone, Serialize, Deserialize)]
11pub struct RonRenderer {
12    #[serde(default)]
13    #[serde(skip_serializing_if = "Option::is_none")]
14    pub pretty: Option<PrettyConfig>,
15}
16
17impl Renderer<String, ron::error::Error> for RonRenderer {
18    fn render(
19        &mut self,
20        tree: &WidgetUnit,
21        _: &CoordsMapping,
22        _layout: &Layout,
23    ) -> Result<String, ron::error::Error> {
24        if let Some(config) = &self.pretty {
25            ron::ser::to_string_pretty(tree, config.clone())
26        } else {
27            ron::ser::to_string(tree)
28        }
29    }
30}
31
32#[derive(Debug, Default, Copy, Clone)]
33pub struct RonValueRenderer;
34
35impl Renderer<ron::value::Value, ron::error::Error> for RonValueRenderer {
36    fn render(
37        &mut self,
38        tree: &WidgetUnit,
39        _: &CoordsMapping,
40        _: &Layout,
41    ) -> Result<ron::value::Value, ron::error::Error> {
42        match ron::ser::to_string(tree) {
43            Ok(s) => ron::value::Value::from_str(&s),
44            Err(e) => Err(e),
45        }
46    }
47}