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}