summaryrefslogtreecommitdiff
path: root/mingling_core/src/renderer/general.rs
blob: 83ea911362ac0b0d9fe8551627d06ecdbcfbc7d2 (plain) (blame)
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
94
95
96
use crate::{
    GeneralRendererSetting, RenderResult, renderer::general::error::GeneralRendererSerializeError,
};
use serde::Serialize;

pub mod error;
pub struct GeneralRenderer;

impl GeneralRenderer {
    // Renders data in the specified format to the given RenderResult.
    pub fn render<T: Serialize + Send>(
        data: &T,
        setting: &GeneralRendererSetting,
        r: &mut RenderResult,
    ) -> Result<(), GeneralRendererSerializeError> {
        match setting {
            GeneralRendererSetting::Disable => Ok(()),
            GeneralRendererSetting::Json => Self::render_to_json(data, r),
            GeneralRendererSetting::JsonPretty => Self::render_to_json_pretty(data, r),
            GeneralRendererSetting::Yaml => Self::render_to_yaml(data, r),
            GeneralRendererSetting::Toml => Self::render_to_toml(data, r),
            GeneralRendererSetting::Ron => Self::render_to_ron(data, r),
            GeneralRendererSetting::RonPretty => Self::render_to_ron_pretty(data, r),
        }
    }

    /// Serializes data to JSON format and writes it to the render result.
    pub fn render_to_json<T: Serialize + Send>(
        data: &T,
        r: &mut RenderResult,
    ) -> Result<(), GeneralRendererSerializeError> {
        let json_string = serde_json::to_string(data)
            .map_err(|e| GeneralRendererSerializeError::new(e.to_string()))?;
        r.print(format!("{}", json_string).as_str());
        Ok(())
    }

    /// Serializes data to pretty-printed JSON format and writes it to the render result.
    pub fn render_to_json_pretty<T: Serialize + Send>(
        data: &T,
        r: &mut RenderResult,
    ) -> Result<(), GeneralRendererSerializeError> {
        let json_string = serde_json::to_string_pretty(data)
            .map_err(|e| GeneralRendererSerializeError::new(e.to_string()))?;
        r.print(format!("{}", json_string).as_str());
        Ok(())
    }

    /// Serializes data to RON format and writes it to the render result.
    pub fn render_to_ron<T: Serialize + Send>(
        data: &T,
        r: &mut RenderResult,
    ) -> Result<(), GeneralRendererSerializeError> {
        let ron_string = ron::ser::to_string(data)
            .map_err(|e| GeneralRendererSerializeError::new(e.to_string()))?;
        r.print(format!("{}", ron_string).as_str());
        Ok(())
    }

    /// Serializes data to pretty-printed RON format and writes it to the render result.
    pub fn render_to_ron_pretty<T: Serialize + Send>(
        data: &T,
        r: &mut RenderResult,
    ) -> Result<(), GeneralRendererSerializeError> {
        let mut pretty_config = ron::ser::PrettyConfig::new();
        pretty_config.new_line = std::borrow::Cow::from("\n");
        pretty_config.indentor = std::borrow::Cow::from("  ");

        let ron_string = ron::ser::to_string_pretty(data, pretty_config)
            .map_err(|e| GeneralRendererSerializeError::new(e.to_string()))?;
        r.print(format!("{}", ron_string).as_str());
        Ok(())
    }

    /// Serializes data to TOML format and writes it to the render result.
    pub fn render_to_toml<T: Serialize + Send>(
        data: &T,
        r: &mut RenderResult,
    ) -> Result<(), GeneralRendererSerializeError> {
        let toml_string =
            toml::to_string(data).map_err(|e| GeneralRendererSerializeError::new(e.to_string()))?;
        r.print(format!("{}", toml_string).as_str());
        Ok(())
    }

    /// Serializes data to YAML format and writes it to the render result.
    pub fn render_to_yaml<T: Serialize + Send>(
        data: &T,
        r: &mut RenderResult,
    ) -> Result<(), GeneralRendererSerializeError> {
        let yaml_string = serde_yaml::to_string(data)
            .map_err(|e| GeneralRendererSerializeError::new(e.to_string()))?;
        r.print(format!("{}", yaml_string).as_str());
        Ok(())
    }
}