1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
//! TODO docs
use crate::{
    action::Action,
    bytes::{NumBytes, Read, Write},
    time::TimePointSec,
    varint::UnsignedInt,
};
use alloc::vec::Vec;

/// TODO docs
#[derive(
    Read,
    Write,
    NumBytes,
    PartialEq,
    Eq,
    PartialOrd,
    Ord,
    Debug,
    Clone,
    Hash,
    Default,
)]
#[eosio(crate_path = "crate::bytes")]
pub struct TransactionExtension(u16, Vec<char>);

/// TODO docs
#[derive(
    Read,
    Write,
    NumBytes,
    PartialEq,
    Eq,
    PartialOrd,
    Ord,
    Debug,
    Clone,
    Hash,
    Default,
)]
#[eosio(crate_path = "crate::bytes")]
pub struct TransactionHeader {
    /// TODO docs
    pub expiration: TimePointSec,
    /// TODO docs
    pub ref_block_num: u16,
    /// TODO docs
    pub ref_block_prefix: u32,
    /// number of 8 byte words this transaction can serialize into after
    /// compressions
    pub max_net_usage_words: UnsignedInt,
    /// number of CPU usage units to bill transaction for
    pub max_cpu_usage_ms: u8,
    /// number of seconds to delay transaction, default: 0
    pub delay_sec: UnsignedInt,
}

/// TODO docs
#[derive(Clone, Debug, Read, Write, NumBytes, Default)]
#[eosio(crate_path = "crate::bytes")]
pub struct Transaction<T: Default + Clone = Vec<u8>> {
    /// TODO docs
    pub header: TransactionHeader,
    /// TODO docs
    pub context_free_actions: Vec<Action<T>>,
    /// TODO docs
    pub actions: Vec<Action<T>>,
    /// TODO docs
    pub transaction_extensions: Vec<TransactionExtension>,
}

/// TODO docs
/// TODO represet this as a String for RPC
#[derive(Clone, Debug)]
pub struct TransactionId(u128);

impl TransactionId {
    /// TODO docs
    #[must_use]
    pub const fn as_u128(&self) -> u128 {
        self.0
    }
}

impl From<u128> for TransactionId {
    #[must_use]
    fn from(value: u128) -> Self {
        Self(value)
    }
}

impl AsRef<TransactionId> for TransactionId {
    fn as_ref(&self) -> &Self {
        self
    }
}