sim_lib_stream_core/
cookbook.rs1use sim_kernel::{Expr, Symbol};
4
5use crate::{BufferPolicy, ClockDomain, StreamDirection, StreamMedia, StreamMetadata};
6
7pub fn metadata_descriptor_demo() -> Expr {
9 let metadata = StreamMetadata::new(
10 Symbol::qualified("stream/demo", "inbound-data"),
11 StreamMedia::Data,
12 StreamDirection::Source,
13 ClockDomain::ServerFrame.symbol(),
14 BufferPolicy::bounded(8).expect("cookbook buffer is bounded"),
15 );
16 metadata.table_expr()
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22
23 #[test]
24 fn metadata_descriptor_round_trips_through_constructor_args() {
25 let Expr::Map(entries) = metadata_descriptor_demo() else {
26 panic!("metadata demo is a map")
27 };
28 assert!(entries.iter().any(|(_, value)| {
29 matches!(value, Expr::Symbol(symbol) if symbol.as_qualified_str() == "stream/media/data")
30 }));
31
32 let metadata = StreamMetadata::new(
33 Symbol::qualified("stream/demo", "inbound-data"),
34 StreamMedia::Data,
35 StreamDirection::Source,
36 ClockDomain::ServerFrame.symbol(),
37 BufferPolicy::bounded(8).expect("valid buffer"),
38 );
39 let rebuilt = StreamMetadata::from_constructor_args(metadata.to_constructor_args())
40 .expect("constructor args rebuild metadata");
41 assert_eq!(rebuilt.id(), metadata.id());
42 assert_eq!(rebuilt.media(), StreamMedia::Data);
43 }
44}