sui_rpc/proto/sui/rpc/v2beta2/
executed_transaction.rs

1use super::*;
2use crate::field::FieldMaskTree;
3use crate::merge::Merge;
4
5impl Merge<&ExecutedTransaction> for ExecutedTransaction {
6    fn merge(&mut self, source: &ExecutedTransaction, mask: &FieldMaskTree) {
7        let ExecutedTransaction {
8            digest,
9            transaction,
10            signatures,
11            effects,
12            events,
13            checkpoint,
14            timestamp,
15            balance_changes,
16            input_objects,
17            output_objects,
18        } = source;
19
20        if mask.contains(Self::DIGEST_FIELD.name) {
21            self.digest = digest.clone();
22        }
23
24        if let Some(submask) = mask.subtree(Self::TRANSACTION_FIELD.name) {
25            self.transaction = transaction
26                .as_ref()
27                .map(|t| Transaction::merge_from(t, &submask));
28        }
29
30        if let Some(submask) = mask.subtree(Self::SIGNATURES_FIELD.name) {
31            self.signatures = signatures
32                .iter()
33                .map(|s| UserSignature::merge_from(s, &submask))
34                .collect();
35        }
36
37        if let Some(submask) = mask.subtree(Self::EFFECTS_FIELD.name) {
38            self.effects = effects
39                .as_ref()
40                .map(|e| TransactionEffects::merge_from(e, &submask));
41        }
42
43        if let Some(submask) = mask.subtree(Self::EVENTS_FIELD.name) {
44            self.events = events
45                .as_ref()
46                .map(|events| TransactionEvents::merge_from(events, &submask));
47        }
48
49        if mask.contains(Self::CHECKPOINT_FIELD.name) {
50            self.checkpoint = *checkpoint;
51        }
52
53        if mask.contains(Self::TIMESTAMP_FIELD.name) {
54            self.timestamp = *timestamp;
55        }
56
57        if mask.contains(Self::BALANCE_CHANGES_FIELD.name) {
58            self.balance_changes = balance_changes.clone();
59        }
60
61        if let Some(submask) = mask.subtree(Self::INPUT_OBJECTS_FIELD.name) {
62            self.input_objects = input_objects
63                .iter()
64                .map(|object| Object::merge_from(object, &submask))
65                .collect();
66        }
67
68        if let Some(submask) = mask.subtree(Self::OUTPUT_OBJECTS_FIELD.name) {
69            self.output_objects = output_objects
70                .iter()
71                .map(|object| Object::merge_from(object, &submask))
72                .collect();
73        }
74    }
75}