-
Notifications
You must be signed in to change notification settings - Fork 9
/
Copy pathget_rbac_registrations.rs
67 lines (59 loc) · 1.96 KB
/
get_rbac_registrations.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//! Get RBAC registrations by Catalyst ID.
use std::sync::Arc;
use scylla::{
prepared_statement::PreparedStatement, statement::Consistency,
transport::iterator::TypedRowStream, DeserializeRow, SerializeRow, Session,
};
use tracing::error;
use crate::db::{
index::{
queries::{PreparedQueries, PreparedSelectQuery},
session::CassandraSession,
},
types::{DbCatalystId, DbSlot, DbTransactionId, DbTxnIndex, DbUuidV4},
};
/// Get registrations by Catalyst ID query.
const QUERY: &str = include_str!("../cql/get_rbac_registrations_catalyst_id.cql");
/// Get registrations by Catalyst ID query params.
#[derive(SerializeRow)]
#[allow(dead_code)]
pub(crate) struct QueryParams {
/// A Catalyst ID.
pub catalyst_id: DbCatalystId,
}
/// Get registrations by Catalyst ID query.
#[allow(dead_code)]
#[derive(DeserializeRow)]
pub(crate) struct Query {
/// Registration transaction id.
pub txn_id: DbTransactionId,
/// A block slot number.
pub slot_no: DbSlot,
/// A transaction index.
pub txn_index: DbTxnIndex,
/// A previous transaction id.
pub prv_txn_id: Option<DbTransactionId>,
/// A registration purpose.
pub purpose: DbUuidV4,
}
impl Query {
/// Prepares a query.
pub(crate) async fn prepare(session: Arc<Session>) -> anyhow::Result<PreparedStatement> {
PreparedQueries::prepare(session, QUERY, Consistency::All, true)
.await
.inspect_err(
|e| error!(error=%e, "Failed to prepare get RBAC registrations by Catalyst ID query"),
)
}
/// Executes a get registrations by Catalyst ID query.
#[allow(dead_code)]
pub(crate) async fn execute(
session: &CassandraSession, params: QueryParams,
) -> anyhow::Result<TypedRowStream<Query>> {
session
.execute_iter(PreparedSelectQuery::RbacRegistrationsByCatalystId, params)
.await?
.rows_stream::<Query>()
.map_err(Into::into)
}
}