geode/
shape.rs

1use schemars::JsonSchema;
2use serde::{Deserialize, Serialize};
3
4use crate::parse::{quantity::Length, range::Range};
5use crate::math::Vec3;
6
7#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
8pub struct Cuboid {
9    x: Range<Length>,
10    y: Range<Length>,
11    z: Range<Length>
12}
13
14#[derive(Debug, Clone, PartialEq, Deserialize, Serialize, JsonSchema)]
15pub struct Sphere {
16    center: Vec3, 
17    radius: Length 
18}
19
20#[cfg(test)]
21mod tests {
22    use super::*;
23    use serde_yaml;
24    use serde_json;
25    use std::str::FromStr;
26
27    #[test]
28    fn cuboid_serde_yaml() {
29        let cuboid = Cuboid {
30            x: Range::from_str("0..10").expect("Valid range should be parsed"),
31            y: Range::from_str("2..20").expect("Valid range should be parsed"),
32            z: Range::from_str("3..30").expect("Valid range should be parsed"),
33        };
34        
35        let yaml_string = serde_yaml::to_string(&cuboid).expect("Failed to serialize to YAML");
36        let deserialized_cuboid: Cuboid = serde_yaml::from_str(&yaml_string).expect("Failed to deserialize from YAML");
37        
38        assert_eq!(cuboid, deserialized_cuboid);
39    }
40    
41    #[test]
42    fn cuboid_serde_json() {
43        let cuboid = Cuboid {
44            x: Range::from_str("1..10").expect("Valid range should be parsed"),
45            y: Range::from_str("2..20").expect("Valid range should be parsed"),
46            z: Range::from_str("3..30").expect("Valid range should be parsed"),
47        };
48        
49        let json_string = serde_json::to_string(&cuboid).expect("Failed to serialize to JSON");
50        let deserialized_cuboid: Cuboid = serde_json::from_str(&json_string).expect("Failed to deserialize from JSON");
51        
52        assert_eq!(cuboid, deserialized_cuboid);
53    }
54}