use async_trait::async_trait;
use super::held::HeldRecord;
use super::receipt::ErasureReceipt;
use crate::error::DppError;
use crate::passport::PassportId;
use crate::personal_data::PersonalDataRecordId;
#[async_trait]
pub trait PersonalDataPort: Send + Sync {
async fn store(
&self,
passport_id: PassportId,
field: &str,
content: &serde_json::Value,
) -> Result<PersonalDataRecordId, DppError>;
async fn fetch(&self, record: &PersonalDataRecordId) -> Result<Option<HeldRecord>, DppError>;
async fn records_for(&self, passport_id: PassportId) -> Result<Vec<HeldRecord>, DppError>;
async fn erase(&self, record: &PersonalDataRecordId) -> Result<ErasureReceipt, DppError>;
}