use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use std::collections::HashMap;
#[cfg(feature = "wasm")]
use wasm_bindgen::prelude::*;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ProofData {
pub file_hash_sha256: String,
pub metadata: HashMap<String, String>,
pub location: Option<LocationData>,
pub device: Option<DeviceData>,
pub network: Option<NetworkData>,
pub timestamps: TimestampData,
pub signature: Option<String>,
pub notarization: Option<NotarizationData>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct LocationData {
pub latitude: f64,
pub longitude: f64,
pub altitude: Option<f64>,
pub accuracy: Option<f64>,
pub provider: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct DeviceData {
pub manufacturer: String,
pub model: String,
pub os_version: String,
pub device_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct NetworkData {
pub network_type: String,
pub wifi_ssid: Option<String>,
pub cell_info: Option<CellInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct CellInfo {
pub carrier: String,
pub cell_id: Option<String>,
pub lac: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TimestampData {
pub created_at: DateTime<Utc>,
pub modified_at: Option<DateTime<Utc>>,
pub proof_generated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct NotarizationData {
pub provider: String,
pub timestamp: DateTime<Utc>,
pub hash: String,
pub proof: String,
}
#[derive(Debug, Clone)]
#[cfg_attr(feature = "uniffi", derive(uniffi::Record))]
pub struct ProofModeConfig {
pub auto_notarize: bool,
pub track_location: bool,
pub track_device_id: bool,
pub track_network: bool,
pub add_credentials: bool,
pub embed_c2pa: bool,
}
impl Default for ProofModeConfig {
fn default() -> Self {
Self {
auto_notarize: true,
track_location: true,
track_device_id: false,
track_network: true,
add_credentials: true,
embed_c2pa: true,
}
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Metadata {
pub description: Option<String>,
pub location: Option<String>,
pub event_type: Option<String>,
pub tags: Option<String>,
}
pub const PROOF_FILE_TAG: &str = ".proof.csv";
pub const PROOF_FILE_JSON_TAG: &str = ".proof.json";
pub const OPENPGP_FILE_TAG: &str = ".asc";
pub const C2PA_FILE_TAG: &str = ".c2pa";