delta_domain_sdk/views/
domain.rs1use base_sdk::{
2 core::Nonce,
3 vaults::{
4 OwnerId,
5 Vault,
6 },
7};
8use domain_runtime::{
9 ports::DbQueriesPort,
10 storage::{
11 DomainVaultColumnFamily,
12 FinalizedVaultColumnFamily,
13 NonceColumnFamily,
14 },
15};
16use snafu::{
17 ResultExt,
18 Snafu,
19};
20use storage::{
21 column_family::StorageQuery,
22 database::StorageError,
23};
24
25#[derive(Debug, Snafu)]
27pub enum Error {
28 #[snafu(display("Error while reading from storage: {source}"))]
30 Storage {
31 source: StorageError,
33 },
34}
35
36#[derive(Debug, Clone)]
38pub struct DomainStateView<Db> {
39 pub(crate) db: Db,
40}
41
42impl<Db> DomainStateView<Db> {
43 pub(crate) const fn new(db: Db) -> Self {
44 Self { db }
45 }
46}
47
48impl<Db> DomainStateView<Db>
49where
50 Db: DbQueriesPort,
51{
52 pub fn get_vault(&self, owner: &OwnerId) -> Result<Option<Vault>, Error> {
67 StorageQuery::<DomainVaultColumnFamily>::get_value(&self.db, owner)
68 .context(StorageSnafu)?
69 .map_or_else(
70 || StorageQuery::<FinalizedVaultColumnFamily>::get_value(&self.db, owner),
71 |v| Ok(Some(v)),
72 )
73 .context(StorageSnafu)
74 }
75
76 pub fn next_nonce(&self, owner: &OwnerId) -> Result<Nonce, Error> {
85 let nonce_opt =
86 StorageQuery::<NonceColumnFamily>::get_value(&self.db, owner).context(StorageSnafu)?;
87 Ok(nonce_opt.unwrap_or_default() + 1)
88 }
89}