Skip to main content

gridline_engine/engine/
format.rs

1use super::Dynamic;
2
3/// Format a Dynamic value for display.
4pub fn format_dynamic(value: &Dynamic) -> String {
5    if value.is_unit() {
6        String::new()
7    } else if let Ok(n) = value.as_float() {
8        format_number(n)
9    } else if let Ok(n) = value.as_int() {
10        n.to_string()
11    } else if let Ok(b) = value.as_bool() {
12        if b { "TRUE" } else { "FALSE" }.to_string()
13    } else if let Ok(s) = value.clone().into_string() {
14        s
15    } else {
16        format!("{:?}", value)
17    }
18}
19
20/// Format a number for display.
21pub fn format_number(n: f64) -> String {
22    if n.is_nan() {
23        "#NAN!".to_string()
24    } else if n.is_infinite() {
25        "#INF!".to_string()
26    } else if n.fract() == 0.0 && n.abs() < 1e10 {
27        format!("{:.0}", n)
28    } else {
29        format!("{:.2}", n)
30    }
31}