CBOR chunked download
This commit is contained in:
@@ -319,6 +319,41 @@ mod serde_channel_events {
|
||||
}
|
||||
} else if cty == EventsDim1::<u8>::serde_id() {
|
||||
match nty {
|
||||
u8::SUB => {
|
||||
let obj: EventsDim1<u8> =
|
||||
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
u16::SUB => {
|
||||
let obj: EventsDim1<u16> =
|
||||
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
u32::SUB => {
|
||||
let obj: EventsDim1<u32> =
|
||||
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
u64::SUB => {
|
||||
let obj: EventsDim1<u64> =
|
||||
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
i8::SUB => {
|
||||
let obj: EventsDim1<i8> =
|
||||
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
i16::SUB => {
|
||||
let obj: EventsDim1<i16> =
|
||||
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
i32::SUB => {
|
||||
let obj: EventsDim1<i32> =
|
||||
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
|
||||
Ok(EvBox(Box::new(obj)))
|
||||
}
|
||||
i64::SUB => {
|
||||
let obj: EventsDim1<i64> =
|
||||
seq.next_element()?.ok_or_else(|| de::Error::missing_field("[2] obj"))?;
|
||||
@@ -879,6 +914,16 @@ impl Events for ChannelEvents {
|
||||
ChannelEvents::Status(item) => Box::new(ChannelEvents::Status(item.take())),
|
||||
}
|
||||
}
|
||||
|
||||
fn to_cbor_vec_u8(&self) -> Vec<u8> {
|
||||
match self {
|
||||
ChannelEvents::Events(item) => item.to_cbor_vec_u8(),
|
||||
ChannelEvents::Status(item) => {
|
||||
error!("TODO convert status to cbor");
|
||||
Vec::new()
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Collectable for ChannelEvents {
|
||||
|
||||
@@ -226,6 +226,16 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct EventsDim0ChunkOutput<STY> {
|
||||
tss: VecDeque<u64>,
|
||||
pulses: VecDeque<u64>,
|
||||
values: VecDeque<STY>,
|
||||
scalar_type: String,
|
||||
}
|
||||
|
||||
impl<STY: ScalarOps> EventsDim0ChunkOutput<STY> {}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct EventsDim0Collector<STY> {
|
||||
vals: EventsDim0<STY>,
|
||||
@@ -925,6 +935,19 @@ impl<STY: ScalarOps> Events for EventsDim0<STY> {
|
||||
};
|
||||
Box::new(dst)
|
||||
}
|
||||
|
||||
fn to_cbor_vec_u8(&self) -> Vec<u8> {
|
||||
let ret = EventsDim0ChunkOutput {
|
||||
// TODO use &mut to swap the content
|
||||
tss: self.tss.clone(),
|
||||
pulses: self.pulses.clone(),
|
||||
values: self.values.clone(),
|
||||
scalar_type: STY::scalar_type_name().into(),
|
||||
};
|
||||
let mut buf = Vec::new();
|
||||
ciborium::into_writer(&ret, &mut buf).unwrap();
|
||||
buf
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
use crate::binsdim0::BinsDim0;
|
||||
use crate::eventsxbindim0::EventsXbinDim0;
|
||||
use crate::framable::FrameType;
|
||||
use crate::ts_offs_from_abs_with_anchor;
|
||||
use crate::IsoDateTime;
|
||||
use crate::RangeOverlapInfo;
|
||||
use crate::TimeBinnableType;
|
||||
@@ -184,6 +185,16 @@ where
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Serialize, Deserialize)]
|
||||
pub struct EventsDim1ChunkOutput<STY> {
|
||||
tss: VecDeque<u64>,
|
||||
pulses: VecDeque<u64>,
|
||||
values: VecDeque<Vec<STY>>,
|
||||
scalar_type: String,
|
||||
}
|
||||
|
||||
impl<STY: ScalarOps> EventsDim1ChunkOutput<STY> {}
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct EventsDim1Collector<STY> {
|
||||
vals: EventsDim1<STY>,
|
||||
@@ -913,6 +924,19 @@ impl<STY: ScalarOps> Events for EventsDim1<STY> {
|
||||
};
|
||||
Box::new(item)
|
||||
}
|
||||
|
||||
fn to_cbor_vec_u8(&self) -> Vec<u8> {
|
||||
let ret = EventsDim1ChunkOutput {
|
||||
// TODO use &mut to swap the content
|
||||
tss: self.tss.clone(),
|
||||
pulses: self.pulses.clone(),
|
||||
values: self.values.clone(),
|
||||
scalar_type: STY::scalar_type_name().into(),
|
||||
};
|
||||
let mut buf = Vec::new();
|
||||
ciborium::into_writer(&ret, &mut buf).unwrap();
|
||||
buf
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
@@ -369,6 +369,10 @@ impl<STY: ScalarOps> Events for EventsXbinDim0<STY> {
|
||||
};
|
||||
Box::new(dst)
|
||||
}
|
||||
|
||||
fn to_cbor_vec_u8(&self) -> Vec<u8> {
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug)]
|
||||
|
||||
@@ -99,10 +99,12 @@ where
|
||||
T: erased_serde::Serialize,
|
||||
{
|
||||
let mut out = Vec::new();
|
||||
let mut ser1 = rmp_serde::Serializer::new(&mut out).with_struct_map();
|
||||
let mut ser2 = <dyn erased_serde::Serializer>::erase(&mut ser1);
|
||||
item.erased_serialize(&mut ser2)
|
||||
.map_err(|e| Error::from(format!("{e}")))?;
|
||||
{
|
||||
let mut ser1 = rmp_serde::Serializer::new(&mut out).with_struct_map();
|
||||
let mut ser2 = <dyn erased_serde::Serializer>::erase(&mut ser1);
|
||||
item.erased_serialize(&mut ser2)
|
||||
.map_err(|e| Error::from(format!("{e}")))?;
|
||||
}
|
||||
Ok(out)
|
||||
}
|
||||
|
||||
@@ -128,9 +130,11 @@ where
|
||||
let mut ser1 = postcard::Serializer {
|
||||
output: postcard::ser_flavors::AllocVec::new(),
|
||||
};
|
||||
let mut ser2 = <dyn erased_serde::Serializer>::erase(&mut ser1);
|
||||
item.erased_serialize(&mut ser2)
|
||||
.map_err(|e| Error::from(format!("{e}")))?;
|
||||
{
|
||||
let mut ser2 = <dyn erased_serde::Serializer>::erase(&mut ser1);
|
||||
item.erased_serialize(&mut ser2)
|
||||
}
|
||||
.map_err(|e| Error::from(format!("{e}")))?;
|
||||
let ret = ser1.output.finalize().map_err(|e| format!("{e}").into());
|
||||
ret
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user