1use crate::{data::DataFrame, error::Error, frame::Frame, invalid_param_error, FrameDescriptor, FrameDescriptorSpec, MediaType, Result};
2
3#[derive(Clone, Copy, Debug, Eq, PartialEq)]
4pub enum DataFormat {
5 Variant = 0, String, }
8
9#[derive(Clone, Debug, Eq, PartialEq)]
10pub struct DataFrameDescriptor {
11 pub format: DataFormat,
12}
13
14impl DataFrameDescriptor {
15 pub fn new(format: DataFormat) -> Self {
16 Self {
17 format,
18 }
19 }
20}
21
22impl From<DataFrameDescriptor> for FrameDescriptor {
23 fn from(desc: DataFrameDescriptor) -> Self {
24 FrameDescriptor::Data(desc)
25 }
26}
27
28impl TryFrom<FrameDescriptor> for DataFrameDescriptor {
29 type Error = Error;
30
31 fn try_from(value: FrameDescriptor) -> Result<Self> {
32 #[allow(irrefutable_let_patterns)]
33 if let FrameDescriptor::Data(desc) = value {
34 Ok(desc)
35 } else {
36 Err(invalid_param_error!(value))
37 }
38 }
39}
40
41impl FrameDescriptorSpec for DataFrameDescriptor {
42 fn media_type(&self) -> MediaType {
43 MediaType::Data
44 }
45
46 fn create_frame(&self) -> Result<Frame<'static, Self>> {
47 Ok(DataFrame::new_with_descriptor(self.clone()))
48 }
49
50 fn as_data(&self) -> Option<&DataFrameDescriptor> {
51 Some(self)
52 }
53}