dgraph_tonic/txn/
read_only.rs

1use std::collections::HashMap;
2use std::fmt::Debug;
3
4use crate::client::ILazyClient;
5use crate::txn::default::Base;
6use crate::txn::{IState, TxnState, TxnType, TxnVariant};
7use crate::Request;
8
9///
10/// Inner state for read only transaction
11///
12#[derive(Clone, Debug)]
13pub struct ReadOnly<C: ILazyClient> {
14    base: Base<C>,
15}
16
17impl<C: ILazyClient> IState for ReadOnly<C> {
18    ///
19    /// Update query request with read_only flag
20    ///
21    fn query_request<S: ILazyClient>(
22        &self,
23        state: &TxnState<S>,
24        query: String,
25        vars: HashMap<String, String>,
26    ) -> Request {
27        let mut request = self.base.query_request(state, query, vars);
28        request.read_only = true;
29        request
30    }
31}
32
33///
34/// ReadOnly variant of transaction
35///
36pub type TxnReadOnlyType<C> = TxnVariant<ReadOnly<C>, C>;
37
38impl<C: ILazyClient> TxnType<C> {
39    ///
40    /// Create new read only transaction from default transaction state
41    ///
42    pub fn read_only(self) -> TxnReadOnlyType<C> {
43        TxnVariant {
44            state: self.state,
45            extra: ReadOnly { base: self.extra },
46        }
47    }
48}