firebase_rs_sdk/data_connect/
mutation.rs

1use std::sync::Arc;
2use std::time::SystemTime;
3
4use crate::data_connect::error::DataConnectResult;
5use crate::data_connect::reference::{DataSource, MutationRef, MutationResult};
6use crate::data_connect::transport::DataConnectTransport;
7
8#[derive(Clone)]
9pub struct MutationManager {
10    transport: Arc<dyn DataConnectTransport>,
11}
12
13impl MutationManager {
14    pub fn new(transport: Arc<dyn DataConnectTransport>) -> Self {
15        Self { transport }
16    }
17
18    pub async fn execute_mutation(
19        &self,
20        mutation_ref: MutationRef,
21    ) -> DataConnectResult<MutationResult> {
22        let data = self
23            .transport
24            .invoke_mutation(mutation_ref.operation_name(), mutation_ref.variables())
25            .await?;
26        Ok(MutationResult {
27            data,
28            source: DataSource::Server,
29            fetch_time: SystemTime::now(),
30            mutation_ref,
31        })
32    }
33}