provenant/output_schema/
file_type.rs1use 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}