This commit is contained in:
Dominik Werder
2023-04-17 14:21:00 +02:00
parent f20beafd96
commit 565999e7c7
13 changed files with 297 additions and 24 deletions

View File

@@ -15,6 +15,7 @@ pub mod streams;
#[cfg(test)]
pub mod test;
pub mod testgen;
pub mod transform;
use channelevents::ChannelEvents;
use chrono::DateTime;

View File

@@ -9,6 +9,7 @@ use items_0::streamitem::Sitemty;
use items_0::streamitem::StreamItem;
use items_0::transform::EventTransform;
use items_0::transform::TransformProperties;
use items_0::transform::WithTransformProperties;
use items_0::MergeError;
use items_0::WithLen;
use netpod::log::*;
@@ -444,11 +445,13 @@ where
}
}
impl<T> EventTransform for Merger<T> {
impl<T> WithTransformProperties for Merger<T> {
fn query_transform_properties(&self) -> TransformProperties {
todo!()
}
}
impl<T> EventTransform for Merger<T> {
fn transform(&mut self, src: Box<dyn items_0::Events>) -> Box<dyn items_0::Events> {
todo!()
}

View File

@@ -4,6 +4,7 @@ use futures_util::Stream;
use futures_util::StreamExt;
use items_0::transform::EventTransform;
use items_0::transform::TransformProperties;
use items_0::transform::WithTransformProperties;
use std::collections::VecDeque;
use std::pin::Pin;
use std::task::Context;
@@ -43,11 +44,19 @@ where
}
}
impl<T> EventTransform for Enumerate2<T> {
impl<T> WithTransformProperties for Enumerate2<T>
where
T: WithTransformProperties,
{
fn query_transform_properties(&self) -> TransformProperties {
todo!()
self.inp.query_transform_properties()
}
}
impl<T> EventTransform for Enumerate2<T>
where
T: WithTransformProperties,
{
fn transform(&mut self, src: Box<dyn items_0::Events>) -> Box<dyn items_0::Events> {
todo!()
}
@@ -64,7 +73,10 @@ where
T: Stream,
F: Fn(<T as Stream>::Item) -> Fut,
{
pub fn new(inp: T, f: F) -> Self {
pub fn new(inp: T, f: F) -> Self
where
T: EventTransform,
{
Self {
inp: Box::pin(inp),
f: Box::pin(f),
@@ -118,11 +130,19 @@ where
}
}
impl<T, F, Fut> EventTransform for Then2<T, F, Fut> {
impl<T, F, Fut> WithTransformProperties for Then2<T, F, Fut>
where
T: EventTransform,
{
fn query_transform_properties(&self) -> TransformProperties {
todo!()
self.inp.query_transform_properties()
}
}
impl<T, F, Fut> EventTransform for Then2<T, F, Fut>
where
T: EventTransform,
{
fn transform(&mut self, src: Box<dyn items_0::Events>) -> Box<dyn items_0::Events> {
todo!()
}
@@ -186,11 +206,13 @@ where
}
}
impl<T> EventTransform for VecStream<T> {
impl<T> WithTransformProperties for VecStream<T> {
fn query_transform_properties(&self) -> TransformProperties {
todo!()
}
}
impl<T> EventTransform for VecStream<T> {
fn transform(&mut self, src: Box<dyn items_0::Events>) -> Box<dyn items_0::Events> {
todo!()
}

97
items_2/src/transform.rs Normal file
View File

@@ -0,0 +1,97 @@
//! Helper functions to create transforms which act locally on a batch of events.
//! Tailored to the usage pattern given by `TransformQuery`.
use crate::channelevents::ChannelEvents;
use crate::eventsdim0::EventsDim0;
use items_0::transform::EventStream;
use items_0::transform::EventTransform;
use items_0::transform::TransformEvent;
use items_0::transform::TransformProperties;
use items_0::transform::WithTransformProperties;
use items_0::Appendable;
use items_0::AsAnyMut;
use items_0::Empty;
use items_0::Events;
use items_0::EventsNonObj;
use netpod::log::*;
use std::mem;
struct TransformEventIdentity {}
impl WithTransformProperties for TransformEventIdentity {
fn query_transform_properties(&self) -> TransformProperties {
todo!()
}
}
impl EventTransform for TransformEventIdentity {
fn transform(&mut self, src: Box<dyn Events>) -> Box<dyn Events> {
todo!()
}
}
pub fn make_transform_identity() -> TransformEvent {
TransformEvent(Box::new(TransformEventIdentity {}))
}
struct TransformEventMinMaxAvg {}
impl WithTransformProperties for TransformEventMinMaxAvg {
fn query_transform_properties(&self) -> TransformProperties {
todo!()
}
}
impl EventTransform for TransformEventMinMaxAvg {
fn transform(&mut self, src: Box<dyn Events>) -> Box<dyn Events> {
todo!()
}
}
pub fn make_transform_min_max_avg() -> TransformEvent {
TransformEvent(Box::new(TransformEventMinMaxAvg {}))
}
struct TransformEventPulseIdDiff {}
impl WithTransformProperties for TransformEventPulseIdDiff {
fn query_transform_properties(&self) -> TransformProperties {
todo!()
}
}
impl EventTransform for TransformEventPulseIdDiff {
fn transform(&mut self, src: Box<dyn Events>) -> Box<dyn Events> {
let mut src = src;
if let Some(chevs) = src.as_any_mut().downcast_mut::<ChannelEvents>() {
let chevs2 = chevs;
let chevs = mem::replace(chevs2, ChannelEvents::Status(None));
let mut pulse_last = None;
match chevs {
ChannelEvents::Events(item) => {
let (tss, pulses) = EventsNonObj::into_tss_pulses(item);
let mut item = EventsDim0::empty();
for (ts, pulse) in tss.into_iter().zip(pulses) {
let value = if let Some(last) = pulse_last {
pulse as i64 - last as i64
} else {
0
};
item.push(ts, pulse, value);
pulse_last = Some(pulse);
}
*chevs2 = ChannelEvents::Events(Box::new(item));
}
ChannelEvents::Status(_) => {}
}
src
} else {
warn!("make_transform_pulse_id_diff item is not ChannelEvents");
src
}
}
}
pub fn make_transform_pulse_id_diff() -> TransformEvent {
TransformEvent(Box::new(TransformEventPulseIdDiff {}))
}