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}