use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct ExifInfo {
pub latitude: Option<f64>,
pub longitude: Option<f64>,
pub city: Option<String>,
pub state: Option<String>,
pub country: Option<String>,
pub time_zone: Option<String>,
pub date_time_original: Option<String>,
pub make: Option<String>,
pub model: Option<String>,
pub lens_model: Option<String>,
pub exposure_time: Option<String>,
pub f_number: Option<f64>,
pub focal_length: Option<f64>,
pub iso: Option<u32>,
pub exif_image_width: Option<u32>,
pub exif_image_height: Option<u32>,
pub file_size_in_byte: Option<u64>,
pub description: Option<String>,
pub rating: Option<u8>,
#[serde(default)]
pub orientation: Option<String>,
#[serde(default)]
pub modify_date: Option<String>,
#[serde(default)]
pub projection_type: Option<String>,
}
impl ExifInfo {
pub fn has_gps(&self) -> bool {
self.latitude.is_some() && self.longitude.is_some()
}
pub fn has_camera_info(&self) -> bool {
self.make.is_some() || self.model.is_some()
}
pub fn has_timezone(&self) -> bool {
self.time_zone.is_some()
}
pub fn has_capture_time(&self) -> bool {
self.date_time_original.is_some()
}
pub fn has_lens_info(&self) -> bool {
self.lens_model.is_some()
}
pub fn has_location(&self) -> bool {
self.city.is_some() || self.country.is_some()
}
}