tawasuyu/llimphi
Sovereign retained-mode GPU UI framework in Rust (wgpu+vello+taffy+parley), Elm loop, 40+ widgets.
1// Copyright 2024 the Velato Authors
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3
4//! The schema for a Lottie `Animation`.
5//!
6//! Raw schema: <https://lottiefiles.github.io/lottie-docs/schema/lottie.schema.json>
7
8pub mod animated_properties;
9pub mod animation;
10pub mod assets;
11pub mod constants;
12// todo effect-values
13// todo effects
14pub mod helpers;
15pub mod layers;
16pub mod shapes;
17pub mod styles;
18//todo text
19
20pub use animation::animation::Animation;
21
22#[cfg(test)]
23mod tests {
24 use crate::schema::{
25 animation::composition::Composition, helpers::visual_object::VisualObject,
26 };
27
28 use super::{Animation, helpers::int_boolean::BoolInt};
29 use serde_json::json;
30 use std::sync::LazyLock;
31
32 static JSON: LazyLock<serde_json::Value> = LazyLock::new(|| {
33 json!(
34 {
35 "v": "5.5.2",
36 "nm": "Example",
37 "fr": 60,
38 "ip": 0,
39 "op": 60,
40 "w": 512,
41 "h": 512,
42 "ddd": 0,
43 "layers": []
44 }
45 )
46 });
47
48 static LOTTIE: LazyLock<Animation> = LazyLock::new(|| Animation {
49 ver: None,
50 visual_object: VisualObject {
51 name: Some("Example".to_string()),
52 ..Default::default()
53 },
54 composition: Composition { layers: vec![] },
55 version: Some("5.5.2".to_string()),
56 frame_rate: 60.0,
57 in_point: 0.0,
58 out_point: 60.0,
59 width: 512,
60 height: 512,
61 three_dimensional: Some(BoolInt::False),
62 assets: None,
63 });
64
65 #[test]
66 fn test_serde_deserialize() {
67 let actual = serde_json::from_value(JSON.to_owned());
68
69 match actual {
70 Ok(actual) => assert_eq!(*LOTTIE, actual),
71 Err(e) => panic!("{e}"),
72 }
73 }
74
75 #[test]
76 fn test_deserialize() {
77 let actual = Animation::from_json(JSON.to_owned());
78
79 match actual {
80 Ok(actual) => assert_eq!(*LOTTIE, actual),
81 Err(e) => panic!("{e}"),
82 }
83 }
84
85 #[test]
86 fn test_can_serialize() {
87 serde_json::to_value(&*LOTTIE).unwrap();
88 }
89}