media_core/data/
data.rs

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, // Variant
6    String,      // String
7}
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}