lottie_data/
lib.rs

1// lottie-data: Serde structs for Lottie JSON format
2pub mod model;
3
4#[cfg(test)]
5mod tests {
6    use super::model::*;
7    use serde_json::json;
8
9    #[test]
10    fn test_deserialize_minimal() {
11        let data = json!({
12            "v": "5.5.2",
13            "ip": 0,
14            "op": 60,
15            "fr": 60,
16            "w": 500,
17            "h": 500,
18            "layers": []
19        });
20        let lottie: LottieJson = serde_json::from_value(data).unwrap();
21        assert_eq!(lottie.w, 500);
22    }
23
24    #[test]
25    fn test_deserialize_shape_layer() {
26        let data = json!({
27            "v": "5.5.2",
28            "ip": 0, "op": 60, "fr": 60, "w": 100, "h": 100,
29            "layers": [
30                {
31                    "ty": 4, // Shape Layer
32                    "ind": 1,
33                    "nm": "MyShape",
34                    "ip": 0, "op": 60, "st": 0,
35                    "ks": {}, // Transform
36                    "shapes": [
37                        {
38                            "ty": "rc",
39                            "nm": "Rect",
40                            "s": { "a": 0, "k": [100, 100] },
41                            "p": { "a": 0, "k": [50, 50] },
42                            "r": { "a": 0, "k": 0 }
43                        },
44                        {
45                            "ty": "fl",
46                            "c": { "a": 0, "k": [1, 0, 0, 1] },
47                            "o": { "a": 0, "k": 100 }
48                        }
49                    ]
50                }
51            ]
52        });
53        let lottie: LottieJson = serde_json::from_value(data).unwrap();
54        let layer = &lottie.layers[0];
55        assert_eq!(layer.ty, 4);
56        if let Some(shapes) = &layer.shapes {
57            assert_eq!(shapes.len(), 2);
58            if let Shape::Rect(rect) = &shapes[0] {
59                assert_eq!(rect.nm.as_deref(), Some("Rect"));
60            } else {
61                panic!("Expected Rect, got {:?}", shapes[0]);
62            }
63        } else {
64            panic!("Expected shapes");
65        }
66    }
67}