Deliver channel status events

This commit is contained in:
Dominik Werder
2023-09-27 14:07:48 +02:00
parent 76c61f564c
commit 921c3c1498
22 changed files with 431 additions and 307 deletions
+48
View File
@@ -6,6 +6,7 @@ use items_0::collect_s::Collected;
use items_0::collect_s::Collector;
use items_0::container::ByteEstimate;
use items_0::framable::FrameTypeInnerStatic;
use items_0::isodate::IsoDateTime;
use items_0::overlap::RangeOverlapInfo;
use items_0::streamitem::ITEMS_2_CHANNEL_EVENTS_FRAME_TYPE_ID;
use items_0::timebin::TimeBinnable;
@@ -15,7 +16,9 @@ use items_0::timebin::TimeBinner;
use items_0::timebin::TimeBinnerTy;
use items_0::AsAnyMut;
use items_0::AsAnyRef;
use items_0::Empty;
use items_0::EventsNonObj;
use items_0::Extendable;
use items_0::MergeError;
use items_0::TypeName;
use items_0::WithLen;
@@ -85,6 +88,41 @@ impl ChannelStatus {
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ChannelStatusEvents {
pub tss: VecDeque<u64>,
pub datetimes: VecDeque<IsoDateTime>,
pub statuses: VecDeque<ChannelStatus>,
}
impl Empty for ChannelStatusEvents {
fn empty() -> Self {
Self {
tss: VecDeque::new(),
datetimes: VecDeque::new(),
statuses: VecDeque::new(),
}
}
}
impl WithLen for ChannelStatusEvents {
fn len(&self) -> usize {
self.tss.len()
}
}
impl Extendable for ChannelStatusEvents {
fn extend_from(&mut self, src: &mut Self) {
use core::mem::replace;
let v = replace(&mut src.tss, VecDeque::new());
self.tss.extend(v.into_iter());
let v = replace(&mut src.datetimes, VecDeque::new());
self.datetimes.extend(v.into_iter());
let v = replace(&mut src.statuses, VecDeque::new());
self.statuses.extend(v.into_iter());
}
}
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct ChannelStatusEvent {
pub ts: u64,
@@ -269,6 +307,11 @@ mod serde_channel_events {
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
Ok(EvBox(Box::new(obj)))
}
String::SUB => {
let obj: EventsDim0<String> =
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
Ok(EvBox(Box::new(obj)))
}
_ => {
error!("TODO serde cty {cty} nty {nty}");
Err(de::Error::custom(&format!("unknown nty {nty}")))
@@ -296,6 +339,11 @@ mod serde_channel_events {
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
Ok(EvBox(Box::new(obj)))
}
String::SUB => {
let obj: EventsDim1<String> =
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
Ok(EvBox(Box::new(obj)))
}
_ => {
error!("TODO serde cty {cty} nty {nty}");
Err(de::Error::custom(&format!("unknown nty {nty}")))
+2
View File
@@ -25,6 +25,7 @@ pub fn empty_events_dyn_ev(scalar_type: &ScalarType, shape: &Shape) -> Result<Bo
F64 => Box::new(K::<f64>::empty()),
BOOL => Box::new(K::<bool>::empty()),
STRING => Box::new(K::<String>::empty()),
ChannelStatus => Box::new(K::<u32>::empty()),
}
}
Shape::Wave(..) => {
@@ -43,6 +44,7 @@ pub fn empty_events_dyn_ev(scalar_type: &ScalarType, shape: &Shape) -> Result<Bo
F64 => Box::new(K::<f64>::empty()),
BOOL => Box::new(K::<bool>::empty()),
STRING => Box::new(K::<String>::empty()),
ChannelStatus => Box::new(K::<u32>::empty()),
}
}
Shape::Image(..) => {