Skip to main content

provenant/output_schema/
file_type.rs

1// SPDX-FileCopyrightText: Provenant contributors
2// SPDX-License-Identifier: Apache-2.0
3
4use serde::{Deserialize, Serialize};
5
6#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Serialize, Deserialize)]
7pub enum OutputFileType {
8    #[serde(rename = "file")]
9    File,
10    #[serde(rename = "directory")]
11    Directory,
12}
13
14impl From<crate::models::FileType> for OutputFileType {
15    fn from(value: crate::models::FileType) -> Self {
16        match value {
17            crate::models::FileType::File => OutputFileType::File,
18            crate::models::FileType::Directory => OutputFileType::Directory,
19        }
20    }
21}
22
23impl From<&crate::models::FileType> for OutputFileType {
24    fn from(value: &crate::models::FileType) -> Self {
25        match value {
26            crate::models::FileType::File => OutputFileType::File,
27            crate::models::FileType::Directory => OutputFileType::Directory,
28        }
29    }
30}
31
32impl TryFrom<OutputFileType> for crate::models::FileType {
33    type Error = String;
34    fn try_from(value: OutputFileType) -> Result<Self, Self::Error> {
35        match value {
36            OutputFileType::File => Ok(crate::models::FileType::File),
37            OutputFileType::Directory => Ok(crate::models::FileType::Directory),
38        }
39    }
40}
41
42#[cfg(test)]
43mod tests {
44    use super::*;
45
46    #[test]
47    fn file_serializes_to_file() {
48        let json = serde_json::to_string(&OutputFileType::File).unwrap();
49        assert_eq!(json, r#""file""#);
50    }
51
52    #[test]
53    fn directory_serializes_to_directory() {
54        let json = serde_json::to_string(&OutputFileType::Directory).unwrap();
55        assert_eq!(json, r#""directory""#);
56    }
57
58    #[test]
59    fn roundtrip_from_model() {
60        let model = crate::models::FileType::File;
61        let output = OutputFileType::from(model.clone());
62        assert_eq!(output, OutputFileType::File);
63        let back = crate::models::FileType::try_from(output).unwrap();
64        assert_eq!(back, model);
65    }
66}