iota_indexer/models/
macros.rs

1// Copyright (c) 2025 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4/// Implement `From` optimistic records to checkpoint records and vice
5/// versa.
6///
7/// # Example
8///
9/// ```ignore
10/// optimistic_from_into_checkpoint!(OptimisticEventEmitPackage, StoredEventEmitPackage, {
11///    event_sequence_number,
12///    package,
13///    sender,
14/// });
15/// ```
16macro_rules! optimistic_from_into_checkpoint {
17    ($optimistic_record:ident, $checkpoint_record:ident, { $($field:ident),* $(,)? }) => {
18        impl From<$optimistic_record> for $checkpoint_record {
19            fn from(item: $optimistic_record) -> Self {
20                Self {
21                    tx_sequence_number: item.tx_insertion_order,
22                    $($field: item.$field),*
23                }
24            }
25        }
26
27        impl From<$checkpoint_record> for $optimistic_record {
28            fn from(item: $checkpoint_record) -> Self {
29                Self {
30                    tx_insertion_order: item.tx_sequence_number,
31                    $($field: item.$field),*
32                }
33            }
34        }
35    };
36}