rillrate_protocol/base/meta_flow/
state.rs1use rill_protocol::flow::core::{DataFraction, Flow};
2use rill_protocol::io::provider::{Path, StreamType};
3use serde::{Deserialize, Serialize};
4
5pub trait MetaFlowSpec: DataFraction {
7 type Meta: DataFraction;
8
9 fn path() -> Path;
10}
11
12#[derive(Debug, Clone, Serialize, Deserialize)]
13pub struct MetaFlowState<T: MetaFlowSpec> {
14 pub meta: Option<T::Meta>,
15}
16
17#[allow(clippy::new_without_default)]
18impl<T: MetaFlowSpec> MetaFlowState<T> {
19 pub fn new() -> Self {
20 Self { meta: None }
21 }
22}
23
24impl<T: MetaFlowSpec> Flow for MetaFlowState<T> {
25 type Action = MetaFlowAction;
26 type Event = MetaFlowEvent<T>;
27
28 fn stream_type() -> StreamType {
29 StreamType::from(module_path!())
30 }
31
32 fn apply(&mut self, event: Self::Event) {
33 match event {
34 MetaFlowEvent::SetMeta { meta } => {
35 self.meta = Some(meta);
36 }
37 MetaFlowEvent::Clear => {
38 self.meta.take();
39 }
40 }
41 }
42}
43
44#[derive(Debug, Clone, Serialize, Deserialize)]
45pub enum MetaFlowAction {}
46
47#[derive(Debug, Clone, Serialize, Deserialize)]
48pub enum MetaFlowEvent<T: MetaFlowSpec> {
49 SetMeta { meta: T::Meta },
50 Clear,
51}