use async_trait::async_trait;
use crate::error::WalletResult;
use crate::storage::find_args::*;
use crate::storage::verify_one_or_none;
use crate::storage::TrxToken;
use crate::tables::*;
#[async_trait]
pub trait StorageReader: Send + Sync {
async fn find_users(
&self,
args: &FindUsersArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<User>>;
async fn find_certificates(
&self,
args: &FindCertificatesArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<Certificate>>;
async fn find_certificate_fields(
&self,
args: &FindCertificateFieldsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<CertificateField>>;
async fn find_commissions(
&self,
args: &FindCommissionsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<Commission>>;
async fn find_monitor_events(
&self,
args: &FindMonitorEventsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<MonitorEvent>>;
async fn find_output_baskets(
&self,
args: &FindOutputBasketsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<OutputBasket>>;
async fn find_output_tag_maps(
&self,
args: &FindOutputTagMapsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<OutputTagMap>>;
async fn find_output_tags(
&self,
args: &FindOutputTagsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<OutputTag>>;
async fn find_outputs(
&self,
args: &FindOutputsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<Output>>;
async fn find_proven_txs(
&self,
args: &FindProvenTxsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<ProvenTx>>;
async fn find_proven_tx_reqs(
&self,
args: &FindProvenTxReqsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<ProvenTxReq>>;
async fn find_settings(
&self,
args: &FindSettingsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<Settings>>;
async fn find_sync_states(
&self,
args: &FindSyncStatesArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<SyncState>>;
async fn find_transactions(
&self,
args: &FindTransactionsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<Transaction>>;
async fn find_tx_label_maps(
&self,
args: &FindTxLabelMapsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<TxLabelMap>>;
async fn find_tx_labels(
&self,
args: &FindTxLabelsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<TxLabel>>;
async fn count_users(&self, args: &FindUsersArgs, trx: Option<&TrxToken>) -> WalletResult<i64>;
async fn count_certificates(
&self,
args: &FindCertificatesArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_certificate_fields(
&self,
args: &FindCertificateFieldsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_commissions(
&self,
args: &FindCommissionsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_monitor_events(
&self,
args: &FindMonitorEventsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_output_baskets(
&self,
args: &FindOutputBasketsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_output_tag_maps(
&self,
args: &FindOutputTagMapsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_output_tags(
&self,
args: &FindOutputTagsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_outputs(
&self,
args: &FindOutputsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_proven_txs(
&self,
args: &FindProvenTxsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_proven_tx_reqs(
&self,
args: &FindProvenTxReqsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_settings(
&self,
args: &FindSettingsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_sync_states(
&self,
args: &FindSyncStatesArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_transactions(
&self,
args: &FindTransactionsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_tx_label_maps(
&self,
args: &FindTxLabelMapsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn count_tx_labels(
&self,
args: &FindTxLabelsArgs,
trx: Option<&TrxToken>,
) -> WalletResult<i64>;
async fn get_proven_txs_for_user(
&self,
args: &FindForUserSincePagedArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<ProvenTx>>;
async fn get_proven_tx_reqs_for_user(
&self,
args: &FindForUserSincePagedArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<ProvenTxReq>>;
async fn get_tx_label_maps_for_user(
&self,
args: &FindForUserSincePagedArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<TxLabelMap>>;
async fn get_output_tag_maps_for_user(
&self,
args: &FindForUserSincePagedArgs,
trx: Option<&TrxToken>,
) -> WalletResult<Vec<OutputTagMap>>;
async fn find_user_by_identity_key(
&self,
key: &str,
trx: Option<&TrxToken>,
) -> WalletResult<Option<User>> {
let args = FindUsersArgs {
partial: UserPartial {
identity_key: Some(key.to_string()),
..Default::default()
},
..Default::default()
};
let results = self.find_users(&args, trx).await?;
verify_one_or_none(results)
}
async fn find_certificate_by_id(
&self,
id: i64,
trx: Option<&TrxToken>,
) -> WalletResult<Option<Certificate>> {
let args = FindCertificatesArgs {
partial: CertificatePartial {
certificate_id: Some(id),
..Default::default()
},
..Default::default()
};
let results = self.find_certificates(&args, trx).await?;
verify_one_or_none(results)
}
async fn find_output_basket_by_id(
&self,
id: i64,
trx: Option<&TrxToken>,
) -> WalletResult<Option<OutputBasket>> {
let args = FindOutputBasketsArgs {
partial: OutputBasketPartial {
basket_id: Some(id),
..Default::default()
},
..Default::default()
};
let results = self.find_output_baskets(&args, trx).await?;
verify_one_or_none(results)
}
async fn find_output_by_id(
&self,
id: i64,
trx: Option<&TrxToken>,
) -> WalletResult<Option<Output>> {
let args = FindOutputsArgs {
partial: OutputPartial {
output_id: Some(id),
..Default::default()
},
..Default::default()
};
let results = self.find_outputs(&args, trx).await?;
verify_one_or_none(results)
}
async fn find_proven_tx_by_id(
&self,
id: i64,
trx: Option<&TrxToken>,
) -> WalletResult<Option<ProvenTx>> {
let args = FindProvenTxsArgs {
partial: ProvenTxPartial {
proven_tx_id: Some(id),
..Default::default()
},
..Default::default()
};
let results = self.find_proven_txs(&args, trx).await?;
verify_one_or_none(results)
}
async fn find_transaction_by_id(
&self,
id: i64,
trx: Option<&TrxToken>,
) -> WalletResult<Option<Transaction>> {
let args = FindTransactionsArgs {
partial: TransactionPartial {
transaction_id: Some(id),
..Default::default()
},
..Default::default()
};
let results = self.find_transactions(&args, trx).await?;
verify_one_or_none(results)
}
async fn find_tx_label_by_id(
&self,
id: i64,
trx: Option<&TrxToken>,
) -> WalletResult<Option<TxLabel>> {
let args = FindTxLabelsArgs {
partial: TxLabelPartial {
tx_label_id: Some(id),
..Default::default()
},
..Default::default()
};
let results = self.find_tx_labels(&args, trx).await?;
verify_one_or_none(results)
}
async fn find_settings_by_identity_key(
&self,
key: &str,
trx: Option<&TrxToken>,
) -> WalletResult<Option<Settings>> {
let args = FindSettingsArgs {
partial: SettingsPartial {
storage_identity_key: Some(key.to_string()),
..Default::default()
},
..Default::default()
};
let results = self.find_settings(&args, trx).await?;
verify_one_or_none(results)
}
}