From 8ab96e565e523fe308cbc217bbc04fc797f1c7aa Mon Sep 17 00:00:00 2001 From: Dominik Werder Date: Wed, 9 Nov 2022 16:20:23 +0100 Subject: [PATCH] Refactor, replace by generic impl --- disk/src/binned/binnedfrompbv.rs | 6 ++-- disk/src/binned/prebinned.rs | 6 ++-- disk/src/eventchunker.rs | 12 ++------ disk/src/raw/eventsfromframes.rs | 4 +-- items/src/binsdim0.rs | 31 ++++++++++--------- items/src/binsdim1.rs | 29 +++++++++--------- items/src/eventsitem.rs | 4 +-- items/src/items.rs | 52 ++++++++++++++++++-------------- items/src/scalarevents.rs | 17 +++-------- items/src/statsevents.rs | 12 ++------ items/src/waveevents.rs | 15 ++------- items/src/xbinnedscalarevents.rs | 23 +++++--------- items/src/xbinnedwaveevents.rs | 18 +++-------- 13 files changed, 94 insertions(+), 135 deletions(-) diff --git a/disk/src/binned/binnedfrompbv.rs b/disk/src/binned/binnedfrompbv.rs index b5a4ac9..f81884e 100644 --- a/disk/src/binned/binnedfrompbv.rs +++ b/disk/src/binned/binnedfrompbv.rs @@ -7,7 +7,7 @@ use futures_core::Stream; use futures_util::{FutureExt, StreamExt}; use http::{StatusCode, Uri}; use items::frame::decode_frame; -use items::{FrameDecodable, FrameType, FrameTypeStaticSYC, TimeBinnableType}; +use items::{FrameDecodable, FrameType, FrameTypeInnerStatic, TimeBinnableType}; use items::{RangeCompletableItem, Sitemty, StreamItem}; use netpod::log::*; use netpod::query::CacheUsage; @@ -33,7 +33,7 @@ pub struct FetchedPreBinned { impl FetchedPreBinned { pub fn new(query: &PreBinnedQuery, host: String, port: u16) -> Result where - TBT: FrameTypeStaticSYC + TimeBinnableType, + TBT: FrameTypeInnerStatic + TimeBinnableType, Sitemty: FrameDecodable, { // TODO should not assume http: @@ -53,7 +53,7 @@ impl FetchedPreBinned { impl Stream for FetchedPreBinned where - TBT: FrameTypeStaticSYC + TimeBinnableType, + TBT: FrameTypeInnerStatic + TimeBinnableType, Sitemty: FrameDecodable, { type Item = Sitemty; diff --git a/disk/src/binned/prebinned.rs b/disk/src/binned/prebinned.rs index eef353f..9714b60 100644 --- a/disk/src/binned/prebinned.rs +++ b/disk/src/binned/prebinned.rs @@ -12,8 +12,8 @@ use futures_core::Stream; use futures_util::StreamExt; use items::numops::{BoolNum, NumOps, StringNum}; use items::{ - Appendable, Clearable, EventsNodeProcessor, Framable, FrameDecodable, FrameType, PushableIndex, - RangeCompletableItem, Sitemty, SitemtyFrameType, StreamItem, TimeBinnableType, TimeBinned, + Appendable, Clearable, EventsNodeProcessor, Framable, FrameDecodable, FrameType, FrameTypeInnerDyn, PushableIndex, + RangeCompletableItem, Sitemty, StreamItem, TimeBinnableType, TimeBinned, }; use netpod::log::*; use netpod::{AggKind, ByteOrder, ChannelTyped, NodeConfigCached, ScalarType, Shape}; @@ -35,7 +35,7 @@ where EVS: EventValueShape + EventValueFromBytes + 'static, ENP: EventsNodeProcessor>::Batch> + 'static, ::Output: PushableIndex + Appendable + Clearable + 'static, - <::Output as TimeBinnableType>::Output: SitemtyFrameType + TimeBinned, + <::Output as TimeBinnableType>::Output: FrameTypeInnerDyn + TimeBinned, Sitemty<::Output>: FrameType + Framable + 'static, Sitemty<<::Output as TimeBinnableType>::Output>: Framable + FrameType + FrameDecodable, { diff --git a/disk/src/eventchunker.rs b/disk/src/eventchunker.rs index d654650..9f8f90f 100644 --- a/disk/src/eventchunker.rs +++ b/disk/src/eventchunker.rs @@ -4,8 +4,8 @@ use bytes::{Buf, BytesMut}; use err::Error; use futures_util::{Stream, StreamExt}; use items::{ - Appendable, ByteEstimate, Clearable, FrameTypeStaticSYC, PushableIndex, RangeCompletableItem, SitemtyFrameType, - StatsItem, StreamItem, WithLen, WithTimestamps, + Appendable, ByteEstimate, Clearable, FrameTypeInnerStatic, PushableIndex, RangeCompletableItem, StatsItem, + StreamItem, WithLen, WithTimestamps, }; use netpod::histo::HistoLog2; use netpod::log::*; @@ -528,16 +528,10 @@ impl EventFull { } } -impl FrameTypeStaticSYC for EventFull { +impl FrameTypeInnerStatic for EventFull { const FRAME_TYPE_ID: u32 = items::EVENT_FULL_FRAME_TYPE_ID; } -impl SitemtyFrameType for EventFull { - fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID - } -} - impl WithLen for EventFull { fn len(&self) -> usize { self.tss.len() diff --git a/disk/src/raw/eventsfromframes.rs b/disk/src/raw/eventsfromframes.rs index 8ffa338..99f58cf 100644 --- a/disk/src/raw/eventsfromframes.rs +++ b/disk/src/raw/eventsfromframes.rs @@ -2,7 +2,7 @@ use crate::frame::inmem::InMemoryFrameAsyncReadStream; use futures_core::Stream; use futures_util::StreamExt; use items::frame::decode_frame; -use items::{FrameTypeStaticSYC, Sitemty, StreamItem}; +use items::{FrameTypeInnerStatic, Sitemty, StreamItem}; use netpod::log::*; use serde::de::DeserializeOwned; use std::marker::PhantomData; @@ -37,7 +37,7 @@ where impl Stream for EventsFromFrames where T: AsyncRead + Unpin, - I: FrameTypeStaticSYC + DeserializeOwned + Unpin, + I: FrameTypeInnerStatic + DeserializeOwned + Unpin, { type Item = Sitemty; diff --git a/items/src/binsdim0.rs b/items/src/binsdim0.rs index 37fe51d..de5d6e5 100644 --- a/items/src/binsdim0.rs +++ b/items/src/binsdim0.rs @@ -1,10 +1,20 @@ use crate::numops::NumOps; use crate::streams::{Collectable, Collector, ToJsonBytes, ToJsonResult}; -use crate::{ - ts_offs_from_abs, Appendable, FilterFittingInside, Fits, FitsInside, FrameTypeStaticSYC, IsoDateTime, NewEmpty, - RangeOverlapInfo, ReadPbv, ReadableFromFile, Sitemty, SitemtyFrameType, SubFrId, TimeBinnableDyn, TimeBinnableType, - TimeBinnableTypeAggregator, TimeBinned, TimeBinnerDyn, TimeBins, WithLen, -}; +use crate::ts_offs_from_abs; +use crate::Appendable; +use crate::FilterFittingInside; +use crate::Fits; +use crate::FitsInside; +use crate::FrameTypeInnerStatic; +use crate::IsoDateTime; +use crate::ReadPbv; +use crate::ReadableFromFile; +use crate::Sitemty; +use crate::SubFrId; +use crate::TimeBinnableDyn; +use crate::{NewEmpty, RangeOverlapInfo, WithLen}; +use crate::{TimeBinnableType, TimeBinnableTypeAggregator}; +use crate::{TimeBinned, TimeBinnerDyn, TimeBins}; use chrono::{TimeZone, Utc}; use err::Error; use netpod::log::*; @@ -28,22 +38,13 @@ pub struct MinMaxAvgDim0Bins { pub avgs: Vec, } -impl FrameTypeStaticSYC for MinMaxAvgDim0Bins +impl FrameTypeInnerStatic for MinMaxAvgDim0Bins where NTY: SubFrId, { const FRAME_TYPE_ID: u32 = crate::MIN_MAX_AVG_DIM_0_BINS_FRAME_TYPE_ID + NTY::SUB; } -impl SitemtyFrameType for MinMaxAvgDim0Bins -where - NTY: SubFrId, -{ - fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID - } -} - impl fmt::Debug for MinMaxAvgDim0Bins where NTY: fmt::Debug, diff --git a/items/src/binsdim1.rs b/items/src/binsdim1.rs index fbbdebd..5bee340 100644 --- a/items/src/binsdim1.rs +++ b/items/src/binsdim1.rs @@ -1,11 +1,19 @@ use crate::numops::NumOps; +use crate::pulse_offs_from_abs; use crate::streams::{Collectable, Collector, ToJsonBytes, ToJsonResult}; +use crate::ts_offs_from_abs; use crate::waveevents::WaveEvents; -use crate::{ - pulse_offs_from_abs, ts_offs_from_abs, Appendable, FilterFittingInside, Fits, FitsInside, FrameTypeStaticSYC, - IsoDateTime, NewEmpty, RangeOverlapInfo, ReadPbv, ReadableFromFile, Sitemty, SitemtyFrameType, SubFrId, - TimeBinnableDyn, TimeBinnableType, TimeBinnableTypeAggregator, TimeBinned, TimeBins, WithLen, -}; +use crate::Appendable; +use crate::FilterFittingInside; +use crate::FrameTypeInnerStatic; +use crate::IsoDateTime; +use crate::RangeOverlapInfo; +use crate::ReadableFromFile; +use crate::TimeBinnableDyn; +use crate::TimeBinnableType; +use crate::TimeBinnableTypeAggregator; +use crate::TimeBins; +use crate::{Fits, FitsInside, NewEmpty, ReadPbv, Sitemty, SubFrId, TimeBinned, WithLen}; use chrono::{TimeZone, Utc}; use err::Error; use netpod::log::*; @@ -27,22 +35,13 @@ pub struct MinMaxAvgDim1Bins { pub avgs: Vec>>, } -impl FrameTypeStaticSYC for MinMaxAvgDim1Bins +impl FrameTypeInnerStatic for MinMaxAvgDim1Bins where NTY: SubFrId, { const FRAME_TYPE_ID: u32 = crate::MIN_MAX_AVG_DIM_1_BINS_FRAME_TYPE_ID + NTY::SUB; } -impl SitemtyFrameType for MinMaxAvgDim1Bins -where - NTY: SubFrId, -{ - fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID - } -} - impl fmt::Debug for MinMaxAvgDim1Bins where NTY: fmt::Debug, diff --git a/items/src/eventsitem.rs b/items/src/eventsitem.rs index d06dbe3..347df75 100644 --- a/items/src/eventsitem.rs +++ b/items/src/eventsitem.rs @@ -1,6 +1,6 @@ use crate::binnedevents::XBinnedEvents; use crate::plainevents::PlainEvents; -use crate::{Appendable, Clearable, PushableIndex, SitemtyFrameType, WithLen, WithTimestamps}; +use crate::{Appendable, Clearable, FrameTypeInnerDyn, PushableIndex, WithLen, WithTimestamps}; use netpod::{AggKind, HasScalarType, HasShape, ScalarType, Shape}; use serde::{Deserialize, Serialize}; @@ -10,7 +10,7 @@ pub enum EventsItem { XBinnedEvents(XBinnedEvents), } -impl SitemtyFrameType for EventsItem { +impl FrameTypeInnerDyn for EventsItem { fn frame_type_id(&self) -> u32 { crate::EVENTS_ITEM_FRAME_TYPE_ID } diff --git a/items/src/items.rs b/items/src/items.rs index cdf29c4..feda325 100644 --- a/items/src/items.rs +++ b/items/src/items.rs @@ -216,27 +216,35 @@ impl SubFrId for BoolNum { const SUB: u32 = 0x0e; } -// To be implemented by the data containers, i.e. the T's in Sitemty, e.g. ScalarEvents. -// TODO rename this, since it is misleading because it is not meanto to be implemented by Sitemty. -pub trait SitemtyFrameType { +// Required for any inner type of Sitemty. +pub trait FrameTypeInnerStatic { + const FRAME_TYPE_ID: u32; +} + +// To be implemented by the T of Sitemty, e.g. ScalarEvents. +pub trait FrameTypeInnerDyn { // TODO check actual usage of this fn frame_type_id(&self) -> u32; } +impl FrameTypeInnerDyn for T +where + T: FrameTypeInnerStatic, +{ + fn frame_type_id(&self) -> u32 { + ::FRAME_TYPE_ID + } +} + pub trait FrameTypeStatic { const FRAME_TYPE_ID: u32; } -// Required for any inner type of Sitemty. -pub trait FrameTypeStaticSYC { - const FRAME_TYPE_ID: u32; -} - impl FrameTypeStatic for Sitemty where - T: FrameTypeStaticSYC, + T: FrameTypeInnerStatic, { - const FRAME_TYPE_ID: u32 = ::FRAME_TYPE_ID; + const FRAME_TYPE_ID: u32 = ::FRAME_TYPE_ID; } // Framable trait objects need some inspection to handle the supposed-to-be common Err ser format: @@ -266,10 +274,10 @@ where impl FrameType for Sitemty where - T: FrameTypeStaticSYC, + T: FrameTypeInnerStatic, { fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID + ::FRAME_TYPE_ID } fn is_err(&self) -> bool { @@ -287,13 +295,13 @@ where } } -impl SitemtyFrameType for Box { +impl FrameTypeInnerDyn for Box { fn frame_type_id(&self) -> u32 { self.as_time_binnable_dyn().frame_type_id() } } -impl SitemtyFrameType for Box { +impl FrameTypeInnerDyn for Box { fn frame_type_id(&self) -> u32 { self.as_time_binnable_dyn().frame_type_id() } @@ -303,11 +311,11 @@ pub trait Framable { fn make_frame(&self) -> Result; } -pub trait FramableInner: erased_serde::Serialize + SitemtyFrameType + Send { +pub trait FramableInner: erased_serde::Serialize + FrameTypeInnerDyn + Send { fn _dummy(&self); } -impl FramableInner for T { +impl FramableInner for T { fn _dummy(&self) {} } @@ -317,7 +325,7 @@ erased_serde::serialize_trait_object!(TimeBinned); impl Framable for Sitemty where - T: Sized + serde::Serialize + SitemtyFrameType, + T: Sized + serde::Serialize + FrameTypeInnerDyn, { fn make_frame(&self) -> Result { match self { @@ -351,7 +359,7 @@ pub trait FrameDecodable: FrameTypeStatic + DeserializeOwned { impl FrameDecodable for Sitemty where - T: FrameTypeStaticSYC + DeserializeOwned, + T: FrameTypeInnerStatic + DeserializeOwned, { fn from_error(e: err::Error) -> Self { Err(e) @@ -373,7 +381,7 @@ where #[derive(Serialize, Deserialize)] pub struct EventQueryJsonStringFrame(pub String); -impl FrameTypeStaticSYC for EventQueryJsonStringFrame { +impl FrameTypeInnerStatic for EventQueryJsonStringFrame { const FRAME_TYPE_ID: u32 = EVENT_QUERY_JSON_STRING_FRAME; } @@ -495,7 +503,7 @@ pub trait TimeBinnableType: + Serialize + DeserializeOwned + ReadableFromFile - + FrameTypeStaticSYC + + FrameTypeInnerStatic { type Output: TimeBinnableType; type Aggregator: TimeBinnableTypeAggregator + Send + Unpin; @@ -508,14 +516,14 @@ pub trait TimeBinnableType: // TODO should not require Sync! // TODO SitemtyFrameType is already supertrait of FramableInner. pub trait TimeBinnableDyn: - std::fmt::Debug + FramableInner + SitemtyFrameType + WithLen + RangeOverlapInfo + Any + Sync + Send + 'static + std::fmt::Debug + FramableInner + FrameTypeInnerDyn + WithLen + RangeOverlapInfo + Any + Sync + Send + 'static { fn time_binner_new(&self, edges: Vec, do_time_weight: bool) -> Box; fn as_any(&self) -> &dyn Any; } pub trait TimeBinnableDynStub: - std::fmt::Debug + FramableInner + SitemtyFrameType + WithLen + RangeOverlapInfo + Any + Sync + Send + 'static + std::fmt::Debug + FramableInner + FrameTypeInnerDyn + WithLen + RangeOverlapInfo + Any + Sync + Send + 'static { } diff --git a/items/src/scalarevents.rs b/items/src/scalarevents.rs index 2c47bfe..25046b9 100644 --- a/items/src/scalarevents.rs +++ b/items/src/scalarevents.rs @@ -3,9 +3,9 @@ use crate::numops::NumOps; use crate::streams::{Collectable, Collector}; use crate::{ pulse_offs_from_abs, ts_offs_from_abs, Appendable, ByteEstimate, Clearable, EventAppendable, EventsDyn, - FilterFittingInside, Fits, FitsInside, FrameTypeStaticSYC, NewEmpty, PushableIndex, RangeOverlapInfo, ReadPbv, - ReadableFromFile, SitemtyFrameType, TimeBinnableDyn, TimeBinnableType, TimeBinnableTypeAggregator, TimeBinnerDyn, - WithLen, WithTimestamps, + FilterFittingInside, Fits, FitsInside, FrameTypeInnerStatic, NewEmpty, PushableIndex, RangeOverlapInfo, ReadPbv, + ReadableFromFile, TimeBinnableDyn, TimeBinnableType, TimeBinnableTypeAggregator, TimeBinnerDyn, WithLen, + WithTimestamps, }; use err::Error; use netpod::log::*; @@ -52,22 +52,13 @@ impl ScalarEvents { } } -impl FrameTypeStaticSYC for ScalarEvents +impl FrameTypeInnerStatic for ScalarEvents where NTY: NumOps, { const FRAME_TYPE_ID: u32 = crate::EVENTS_0D_FRAME_TYPE_ID + NTY::SUB; } -impl SitemtyFrameType for ScalarEvents -where - NTY: NumOps, -{ - fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID - } -} - impl ScalarEvents { pub fn empty() -> Self { Self { diff --git a/items/src/statsevents.rs b/items/src/statsevents.rs index 092a5ab..6c0a36d 100644 --- a/items/src/statsevents.rs +++ b/items/src/statsevents.rs @@ -1,8 +1,8 @@ use crate::streams::{Collectable, Collector}; use crate::{ ts_offs_from_abs, Appendable, ByteEstimate, Clearable, EventAppendable, FilterFittingInside, Fits, FitsInside, - FrameTypeStaticSYC, NewEmpty, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, - TimeBinnableType, TimeBinnableTypeAggregator, WithLen, WithTimestamps, + FrameTypeInnerStatic, NewEmpty, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, TimeBinnableType, + TimeBinnableTypeAggregator, WithLen, WithTimestamps, }; use err::Error; use netpod::log::*; @@ -17,16 +17,10 @@ pub struct StatsEvents { pub pulses: Vec, } -impl FrameTypeStaticSYC for StatsEvents { +impl FrameTypeInnerStatic for StatsEvents { const FRAME_TYPE_ID: u32 = crate::STATS_EVENTS_FRAME_TYPE_ID; } -impl SitemtyFrameType for StatsEvents { - fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID - } -} - impl StatsEvents { pub fn empty() -> Self { Self { diff --git a/items/src/waveevents.rs b/items/src/waveevents.rs index 13628cd..d076a31 100644 --- a/items/src/waveevents.rs +++ b/items/src/waveevents.rs @@ -4,8 +4,8 @@ use crate::xbinnedscalarevents::XBinnedScalarEvents; use crate::xbinnedwaveevents::XBinnedWaveEvents; use crate::{ Appendable, ByteEstimate, Clearable, EventAppendable, EventsDyn, EventsNodeProcessor, FilterFittingInside, Fits, - FitsInside, FrameTypeStaticSYC, NewEmpty, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, - SitemtyFrameType, SubFrId, TimeBinnableDyn, TimeBinnableType, TimeBinnableTypeAggregator, WithLen, WithTimestamps, + FitsInside, FrameTypeInnerStatic, NewEmpty, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SubFrId, + TimeBinnableDyn, TimeBinnableType, TimeBinnableTypeAggregator, WithLen, WithTimestamps, }; use err::Error; use netpod::log::*; @@ -40,22 +40,13 @@ impl WaveEvents { } } -impl FrameTypeStaticSYC for WaveEvents +impl FrameTypeInnerStatic for WaveEvents where NTY: SubFrId, { const FRAME_TYPE_ID: u32 = crate::WAVE_EVENTS_FRAME_TYPE_ID + NTY::SUB; } -impl SitemtyFrameType for WaveEvents -where - NTY: SubFrId, -{ - fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID - } -} - impl WaveEvents { pub fn empty() -> Self { Self { diff --git a/items/src/xbinnedscalarevents.rs b/items/src/xbinnedscalarevents.rs index 51f097a..2071fcd 100644 --- a/items/src/xbinnedscalarevents.rs +++ b/items/src/xbinnedscalarevents.rs @@ -2,8 +2,8 @@ use crate::binsdim0::MinMaxAvgDim0Bins; use crate::numops::NumOps; use crate::streams::{Collectable, Collector}; use crate::{ - ts_offs_from_abs, Appendable, ByteEstimate, Clearable, FilterFittingInside, Fits, FitsInside, FrameTypeStaticSYC, - NewEmpty, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, SubFrId, TimeBinnableType, + ts_offs_from_abs, Appendable, ByteEstimate, Clearable, FilterFittingInside, Fits, FitsInside, FrameTypeInnerStatic, + NewEmpty, PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SubFrId, TimeBinnableType, TimeBinnableTypeAggregator, WithLen, WithTimestamps, }; use err::Error; @@ -23,29 +23,20 @@ pub struct XBinnedScalarEvents { pub avgs: Vec, } -impl FrameTypeStaticSYC for XBinnedScalarEvents +impl FrameTypeInnerStatic for XBinnedScalarEvents where NTY: SubFrId, { const FRAME_TYPE_ID: u32 = crate::X_BINNED_SCALAR_EVENTS_FRAME_TYPE_ID + NTY::SUB; } -impl SitemtyFrameType for XBinnedScalarEvents -where - NTY: SubFrId, -{ - fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID - } -} - impl XBinnedScalarEvents { pub fn empty() -> Self { Self { - tss: vec![], - mins: vec![], - maxs: vec![], - avgs: vec![], + tss: Vec::new(), + mins: Vec::new(), + maxs: Vec::new(), + avgs: Vec::new(), } } } diff --git a/items/src/xbinnedwaveevents.rs b/items/src/xbinnedwaveevents.rs index b62f6e8..57b8c97 100644 --- a/items/src/xbinnedwaveevents.rs +++ b/items/src/xbinnedwaveevents.rs @@ -2,9 +2,9 @@ use crate::binsdim1::MinMaxAvgDim1Bins; use crate::numops::NumOps; use crate::streams::{Collectable, Collector}; use crate::{ - Appendable, ByteEstimate, Clearable, FilterFittingInside, Fits, FitsInside, FrameTypeStaticSYC, NewEmpty, - PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SitemtyFrameType, SubFrId, TimeBinnableType, - TimeBinnableTypeAggregator, WithLen, WithTimestamps, + Appendable, ByteEstimate, Clearable, FilterFittingInside, Fits, FitsInside, FrameTypeInnerStatic, NewEmpty, + PushableIndex, RangeOverlapInfo, ReadPbv, ReadableFromFile, SubFrId, TimeBinnableType, TimeBinnableTypeAggregator, + WithLen, WithTimestamps, }; use err::Error; use netpod::log::*; @@ -23,23 +23,13 @@ pub struct XBinnedWaveEvents { pub avgs: Vec>, } -impl FrameTypeStaticSYC for XBinnedWaveEvents +impl FrameTypeInnerStatic for XBinnedWaveEvents where NTY: SubFrId, { const FRAME_TYPE_ID: u32 = crate::X_BINNED_WAVE_EVENTS_FRAME_TYPE_ID + NTY::SUB; } -// TODO use a generic impl for this: -impl SitemtyFrameType for XBinnedWaveEvents -where - NTY: SubFrId, -{ - fn frame_type_id(&self) -> u32 { - ::FRAME_TYPE_ID - } -} - impl XBinnedWaveEvents { pub fn empty() -> Self { Self {