dgraph_tonic/txn/
default.rs

1use std::collections::HashMap;
2use std::fmt::Debug;
3use std::marker::PhantomData;
4
5use crate::client::ILazyClient;
6use crate::stub::Stub;
7use crate::txn::{IState, TxnState, TxnVariant};
8use crate::Request;
9
10///
11/// Inner state for default transaction
12///
13#[derive(Clone, Debug)]
14pub struct Base<C: ILazyClient> {
15    mark: PhantomData<C>,
16}
17
18impl<C: ILazyClient> IState for Base<C> {
19    ///
20    /// Create Dgraph request within transaction.
21    ///
22    fn query_request<S: ILazyClient>(
23        &self,
24        state: &TxnState<S>,
25        query: String,
26        vars: HashMap<String, String>,
27    ) -> Request {
28        Request {
29            query,
30            vars,
31            start_ts: state.context.start_ts,
32            ..Default::default()
33        }
34    }
35}
36
37///
38/// Default transaction state
39///
40pub type TxnType<C> = TxnVariant<Base<C>, C>;
41
42impl<C: ILazyClient> TxnType<C> {
43    ///
44    /// Create new default transaction which can do query operations.
45    ///
46    pub fn new(stub: Stub<C>) -> TxnType<C> {
47        Self {
48            state: Box::new(TxnState {
49                context: Default::default(),
50                stub,
51            }),
52            extra: Base {
53                mark: PhantomData {},
54            },
55        }
56    }
57}