tf2_enum/
attribute_value.rs1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Default, Clone, PartialEq, PartialOrd, Serialize, Deserialize)]
5#[serde(untagged)]
6pub enum AttributeValue {
7 Integer(u32),
9 Float(f32),
11 String(String),
13 #[default]
15 None,
16}
17
18impl From<u32> for AttributeValue {
19 fn from(value: u32) -> Self {
20 AttributeValue::Integer(value)
21 }
22}
23
24impl From<f32> for AttributeValue {
25 fn from(value: f32) -> Self {
26 AttributeValue::Float(value)
27 }
28}
29
30impl From<String> for AttributeValue {
31 fn from(value: String) -> Self {
32 AttributeValue::String(value)
33 }
34}
35
36impl From<&String> for AttributeValue {
37 fn from(value: &String) -> Self {
38 AttributeValue::String(value.clone())
39 }
40}
41
42impl From<&str> for AttributeValue {
43 fn from(value: &str) -> Self {
44 AttributeValue::String(value.to_string())
45 }
46}
47
48#[cfg(test)]
49mod tests {
50 use super::*;
51
52 #[test]
53 fn serializes() {
54 let int_value = AttributeValue::Integer(42);
55 let float_value = AttributeValue::Float(3.14);
56 let string_value = AttributeValue::String("Hello".into());
57
58 let int_json = serde_json::to_string(&int_value).unwrap();
59 let float_json = serde_json::to_string(&float_value).unwrap();
60 let string_json = serde_json::to_string(&string_value).unwrap();
61
62 assert_eq!(int_json, r#"42"#);
63 assert_eq!(float_json, r#"3.14"#);
64 assert_eq!(string_json, r#""Hello""#);
65 }
66}