dwn_core/store/
record.rs

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}