use async_trait::async_trait;
use chrono::{DateTime, Utc};
use super::receipt::ArchiveReceipt;
use super::version::ArchivedVersion;
use crate::error::DppError;
use crate::passport::PassportId;
#[async_trait]
pub trait ArchivedVersionPort: Send + Sync {
async fn archive(
&self,
passport_id: PassportId,
doc: &serde_json::Value,
superseded_at: DateTime<Utc>,
) -> Result<ArchiveReceipt, DppError>;
async fn versions(&self, passport_id: PassportId) -> Result<Vec<ArchivedVersion>, DppError>;
async fn version_at(
&self,
passport_id: PassportId,
at: DateTime<Utc>,
) -> Result<Option<ArchivedVersion>, DppError>;
}