1use semver::Version;
2use serde::{Deserialize, Serialize};
3use xdid::core::did::Did;
4
5use crate::message::{
6 Message,
7 descriptor::{ProtocolDefinition, RecordFilter, RecordsSync},
8};
9
10use super::{DataStore, StoreError};
11
12#[derive(Serialize, Deserialize, Debug, PartialEq, Eq)]
13pub struct Record {
14 pub initial_entry: Message,
15 pub latest_entry: Message,
16}
17
18pub trait RecordStore: Send + Sync {
19 fn configure_protocol(&self, target: &Did, message: Message) -> Result<(), StoreError>;
20
21 fn query_protocol(
22 &self,
23 target: &Did,
24 protocol: String,
25 versions: Vec<Version>,
26 authorized: bool,
27 ) -> Result<Vec<(Version, ProtocolDefinition)>, StoreError>;
28
29 fn prepare_sync(&self, target: &Did, authorized: bool) -> Result<RecordsSync, StoreError>;
30
31 fn delete(&self, ds: &dyn DataStore, target: &Did, message: Message) -> Result<(), StoreError>;
32
33 fn query(
34 &self,
35 target: &Did,
36 filter: &RecordFilter,
37 authorized: bool,
38 ) -> Result<Vec<Message>, StoreError>;
39
40 fn read(
41 &self,
42 ds: &dyn DataStore,
43 target: &Did,
44 record_id: &str,
45 ) -> Result<Option<Record>, StoreError>;
46
47 fn write(&self, ds: &dyn DataStore, target: &Did, message: Message) -> Result<(), StoreError>;
48}