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
use super::*; pub trait Primitive: Clone { fn get(node: &NodeRef) -> Self; fn empty() -> Self; } impl Primitive for String { fn get(node: &NodeRef) -> Self { node.as_string() } fn empty() -> Self { String::new() } } impl Primitive for PathBuf { fn get(node: &NodeRef) -> Self { PathBuf::from(node.as_string()) } fn empty() -> Self { PathBuf::new() } } impl Primitive for f64 { fn get(node: &NodeRef) -> Self { node.as_float() } fn empty() -> Self { std::f64::NAN } } impl Primitive for bool { fn get(node: &NodeRef) -> Self { node.as_boolean() } fn empty() -> Self { false } }