use std::path::Path; use mime_guess::Mime; use crate::inspectors::mime_extension_lookup; use crate::string_type::String; #[cfg(feature = "json")] use serde::{ser::SerializeStruct, Serializer}; /// Information about a scanned file. #[derive(Ord, PartialOrd, Eq, PartialEq)] pub struct Findings<'a> { /// The location of the scanned file. pub file: &'a Path, /// Whether or not the file's extension is valid for its mimetype. pub valid: bool, /// The file's mimetype. pub mime: Mime, } #[cfg(feature = "json")] impl<'a> serde::Serialize for Findings<'a> { fn serialize(&self, serializer: S) -> Result where S: Serializer, { // the second parameter is the number of fields in the struct -- in this case, 3 let mut state = serializer.serialize_struct("Findings", 3)?; state.serialize_field("file", &self.file)?; state.serialize_field("valid", &self.valid)?; state.serialize_field("mime", &self.mime.essence_str())?; state.end() } } impl<'a> Findings<'a> { pub fn recommended_extension(&self) -> Option { mime_extension_lookup(self.mime.clone()).map(|extensions| extensions[0].clone()) } }