concinnity_core/resource/
runtime.rs1use alloc::vec::Vec;
8
9use crate::ecs::asset_id::AssetId;
10
11#[derive(Debug, Clone, Default)]
18pub struct RuntimeMeshPayloads(Vec<(AssetId, Vec<u8>)>);
19
20impl RuntimeMeshPayloads {
21 pub fn push(&mut self, id: AssetId, payload: Vec<u8>) {
23 self.0.push((id, payload));
24 }
25
26 pub fn get(&self, id: AssetId) -> Option<&[u8]> {
28 self.0
29 .iter()
30 .find(|(owner, _)| *owner == id)
31 .map(|(_, b)| &b[..])
32 }
33
34 pub fn iter(&self) -> impl Iterator<Item = (AssetId, &[u8])> {
36 self.0.iter().map(|(id, b)| (*id, &b[..]))
37 }
38
39 pub fn len(&self) -> usize {
41 self.0.len()
42 }
43
44 pub fn is_empty(&self) -> bool {
46 self.0.is_empty()
47 }
48}
49
50#[cfg(test)]
51mod tests {
52 use super::*;
53 use alloc::vec;
54
55 #[test]
56 fn a_baked_payload_is_found_by_its_owner_id() {
57 let mut payloads = RuntimeMeshPayloads::default();
58 assert!(payloads.is_empty());
59 payloads.push(AssetId(7), vec![1, 2, 3]);
60 assert_eq!(payloads.get(AssetId(7)), Some(&[1u8, 2, 3][..]));
61 assert_eq!(payloads.get(AssetId(8)), None);
62 assert!(!payloads.is_empty());
63 assert_eq!(payloads.len(), 1);
64 }
65
66 #[test]
67 fn payloads_keep_the_order_they_were_installed_in() {
68 let mut payloads = RuntimeMeshPayloads::default();
69 payloads.push(AssetId(9), vec![1]);
70 payloads.push(AssetId(4), vec![2]);
71 let order: Vec<AssetId> = payloads.iter().map(|(id, _)| id).collect();
72 assert_eq!(order, vec![AssetId(9), AssetId(4)]);
73 }
74}