sui_rpc/proto/sui/rpc/v2/
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            objects,
17        } = source;
18
19        if mask.contains(Self::DIGEST_FIELD.name) {
20            self.digest = digest.clone();
21        }
22
23        if let Some(submask) = mask.subtree(Self::TRANSACTION_FIELD.name) {
24            self.transaction = transaction
25                .as_ref()
26                .map(|t| Transaction::merge_from(t, &submask));
27        }
28
29        if let Some(submask) = mask.subtree(Self::SIGNATURES_FIELD.name) {
30            self.signatures = signatures
31                .iter()
32                .map(|s| UserSignature::merge_from(s, &submask))
33                .collect();
34        }
35
36        if let Some(submask) = mask.subtree(Self::EFFECTS_FIELD.name) {
37            self.effects = effects
38                .as_ref()
39                .map(|e| TransactionEffects::merge_from(e, &submask));
40        }
41
42        if let Some(submask) = mask.subtree(Self::EVENTS_FIELD.name) {
43            self.events = events
44                .as_ref()
45                .map(|events| TransactionEvents::merge_from(events, &submask));
46        }
47
48        if mask.contains(Self::CHECKPOINT_FIELD.name) {
49            self.checkpoint = *checkpoint;
50        }
51
52        if mask.contains(Self::TIMESTAMP_FIELD.name) {
53            self.timestamp = *timestamp;
54        }
55
56        if mask.contains(Self::BALANCE_CHANGES_FIELD.name) {
57            self.balance_changes = balance_changes.clone();
58        }
59
60        if let Some(submask) = mask.subtree(Self::OBJECTS_FIELD) {
61            self.objects = objects
62                .as_ref()
63                .map(|objects| ObjectSet::merge_from(objects, &submask));
64        }
65    }
66}