pub mod animation;
pub mod attachment;
pub mod bone;
pub mod constraint;
pub mod event;
pub mod skeleton;
pub mod skin;
pub mod slot;
pub use animation::{Animation, AnimationEvent, CurveFrames, PhysicsProperty, Timeline};
pub use attachment::{
Attachment, AttachmentType, BoundingBoxAttachment, ClippingAttachment, MeshAttachment,
PathAttachment, PointAttachment, RegionAttachment, Sequence, SequenceMode, TextureRegionRef,
TimelineLink, VertexData,
};
pub use bone::{BoneData, BoneLocal, Inherit};
pub use constraint::{
ConstraintData, FromProperty, IkConstraintData, IkConstraintPose, PathConstraintData,
PathConstraintPose, PhysicsConstraintData, PhysicsConstraintPose, PositionMode, RotateMode,
ScaleYMode, SliderData, SliderPose, SliderProperty, SpacingMode, ToProperty,
TransformConstraintData, TransformConstraintPose, TransformProperty,
};
pub use event::EventData;
pub use skeleton::SkeletonData;
pub use skin::{AttachmentRef, Skin, SkinKeys};
pub use slot::{BlendMode, SlotData};
macro_rules! define_id {
($(#[$meta:meta])* $vis:vis $name:ident($inner:ty)) => {
$(#[$meta])*
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
$vis struct $name(pub $inner);
impl $name {
#[inline]
#[must_use]
pub fn index(self) -> usize {
self.0 as usize
}
}
impl From<$name> for usize {
#[inline]
fn from(id: $name) -> usize {
id.0 as usize
}
}
};
}
define_id!(
pub BoneId(u16)
);
define_id!(
pub SlotId(u16)
);
define_id!(
pub SkinId(u16)
);
define_id!(
pub SkinKey(u32)
);
define_id!(
pub EventId(u16)
);
define_id!(
pub ConstraintId(u16)
);
define_id!(
pub AnimationId(u16)
);
define_id!(
pub AttachmentId(u32)
);
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn ids_convert_to_usize() {
assert_eq!(BoneId(5).index(), 5);
assert_eq!(usize::from(SlotId(42)), 42);
}
#[test]
fn ids_are_distinct_types() {
fn _would_not_compile() {}
}
}