concinnity_core/components/
audio_clip.rs1use crate::ecs::PayloadLocator;
4use crate::ecs::asset_id::AssetId;
5use alloc::string::String;
6
7#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
23#[serde(default)]
24#[derive(Default)]
25pub struct AudioClip {
26 #[serde(skip)]
28 pub asset_id: AssetId,
29 pub source: String,
31 #[serde(skip)]
33 pub locator: Option<PayloadLocator>,
34}
35
36#[cfg(test)]
37mod tests {
38 use super::*;
39
40 #[test]
41 fn a_blank_clip_names_no_source() {
42 let c = AudioClip::default();
43 assert!(c.source.is_empty());
44 assert_eq!(c.asset_id, AssetId::default());
45 assert!(c.locator.is_none());
46 }
47
48 #[test]
49 fn the_source_path_is_the_only_authored_field() {
50 let c: AudioClip = serde_json::from_str(r#"{"source":"audio/theme.wav"}"#).unwrap();
51 assert_eq!(c.source, "audio/theme.wav");
52 assert_eq!(
55 serde_json::to_string(&c).unwrap(),
56 r#"{"source":"audio/theme.wav"}"#
57 );
58
59 let bytes = postcard::to_allocvec(&c).unwrap();
60 let back: AudioClip = postcard::from_bytes(&bytes).unwrap();
61 assert_eq!(back.source, "audio/theme.wav");
62 assert_eq!(back.asset_id, AssetId::default());
63 assert!(back.locator.is_none());
64 }
65}