onenote_parser/one/property/
file_type.rs

1use crate::errors::{ErrorKind, Result};
2use crate::one::property::PropertyType;
3use crate::onestore::object::Object;
4
5/// An embedded file's file type.
6///
7/// See [\[MS-ONE\] 2.3.62].
8///
9/// [\[MS-ONE\] 2.3.62]: https://docs.microsoft.com/en-us/openspecs/office_file_formats/ms-one/112836a0-ed3b-4be1-bc4b-49f0f7b02295
10#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
11pub enum FileType {
12    /// Unknown
13    Unknown,
14
15    /// An audio file.
16    Audio,
17
18    /// A video file.
19    Video,
20}
21
22impl FileType {
23    pub(crate) fn parse(object: &Object) -> Result<FileType> {
24        let value = match object.props().get(PropertyType::IRecordMedia) {
25            Some(value) => value.to_u32().ok_or_else(|| {
26                ErrorKind::MalformedOneNoteFileData("file type status is not a u32".into())
27            })?,
28            None => return Ok(FileType::Unknown),
29        };
30
31        let file_type = match value {
32            1 => FileType::Audio,
33            2 => FileType::Video,
34            _ => {
35                return Err(ErrorKind::MalformedOneNoteFileData(
36                    format!("invalid file type: {}", value).into(),
37                )
38                .into())
39            }
40        };
41
42        Ok(file_type)
43    }
44}