aada 0.1.1

纯 Rust 的 2D 骨骼动画引擎,兼容 Spine 4.x 导出格式(JSON + atlas)。求解到分层 Mesh 与各 Mesh 渲染设置为止,之后交给渲染器。
Documentation
//! 皮肤的序列化中间结构(store 层):逻辑附件名 -> 具体附件名映射。

use serde::{Deserialize, Serialize};

use crate::vec_map::VecMap;

/// 皮肤就是一个逻辑attachment到具体attachment的映射关系,
/// 所有的attachment扁平化存储,即其名称必须是唯一的
/// serde过程是透明化的,直接序列化为一个字符串到字符串的map
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)]
#[serde(transparent)]
pub struct SkinStore(VecMap<String, String>);

#[test]
fn test_skin_serde() {
    let skin = SkinStore(
        [
            ("head", "head_mesh"),
            ("body", "body_mesh"),
            ("arm", "arm_mesh"),
        ]
        .into_iter()
        .map(|(k, v)| (k.to_string(), v.to_string()))
        .collect(),
    );
    let json = serde_json::to_string(&skin).unwrap();
    assert_eq!(
        json,
        r#"{"head":"head_mesh","body":"body_mesh","arm":"arm_mesh"}"#
    );
    let deserialized_skin: SkinStore = serde_json::from_str(&json).unwrap();
    assert_eq!(skin, deserialized_skin);
}