1#![allow(non_camel_case_types)]
7#![allow(non_snake_case)]
8#![allow(non_upper_case_globals)]
9#![allow(unused_imports)]
10#![allow(dead_code)]
11#![allow(unused_variables)]
12#![allow(clippy::unnecessary_cast)]
13
14use crate::*;
15use core::option::Option;
16use core::ops::{Deref, DerefMut};
17
18#[cfg(feature = "std")]
19use std::io::{Read, Write};
20#[cfg(feature = "xdrs")]
21use xdrs::*;
22
23
24#[cfg(feature = "serde")]
25use ::serde::{{Serialize, Deserialize}};
26
27
28
29pub const kMaxEventLength : u32 = 1024;
38
39pub const kMaxEventsPerTransaction : u32 = 1000;
43
44pub const kMaxTopics : u32 = 3;
47
48#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
54#[cfg_attr(feature = "xdrs", derive(ReadXDR, WriteXDR, ConstXDRSize))]
55#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
56#[derive(Default, Copy)]
57#[repr(transparent)]
58#[cfg_attr(feature = "serde", serde(transparent))]
59pub struct Topic {
60 #[cfg_attr(feature = "serde", serde(with = "xdr_common::serde_hex"))]
61 inner: [u8; 32 as usize],
62}
63impl From<[u8; 32 as usize]> for Topic {
64 fn from(_inner: [u8; 32 as usize]) -> Self {
65 Self { inner: _inner }
66 }
67}
68impl Topic {
69 pub fn into_inner(self) -> [u8; 32 as usize] {
70 self.inner
71 }
72 pub const fn new(_inner: [u8; 32 as usize]) -> Self {
73 Self { inner: _inner }
74 }
75}
76
77impl Deref for Topic {
78 type Target = [u8; 32 as usize];
79
80 fn deref(&self) -> &Self::Target {
81 &self.inner
82 }
83}
84impl DerefMut for Topic {
85 fn deref_mut(&mut self) -> &mut Self::Target {
86 &mut self.inner
87 }
88}
89impl AsRef<[u8]> for Topic {
90 fn as_ref(&self) -> &[u8] {
91 self.deref().as_slice()
92 }
93}
94impl<'a> From<&'a [u8; 32]> for &'a Topic {
95 fn from(arr: &[u8; 32]) -> Self {
96 let ptr = arr as *const [u8; 32] as *const Topic;
97 unsafe { &*ptr }
98 }
99}
100#[cfg(feature = "xdrs")]
101impl<'r: 'a, 'a> ReadXDR<'r> for &'a Topic {
102 fn read_xdr<R: xdrs::Reader<'r>>(r: &mut R) -> xdrs::ReadResult<Self> {
103 let arr: &[u8; 32] = xdrs::read_xdr(r)?;
104 let val = Self::from(arr);
105 Ok(val)
106 }
107}
108
109#[cfg(feature = "schema")]
110impl schemars::JsonSchema for Topic {
111 fn schema_name() -> ::std::borrow::Cow<'static, str> {
112 "Topic".into()
113 }
114 fn json_schema(_gen: &mut schemars::SchemaGenerator) -> schemars::Schema {
115 schemars::json_schema!({
116 "type": "string",
117 "contentEncoding": "hex",
118 "contentMediaType": "application/binary",
119 "minLength": 64,
120 "maxLength": 64
121 })
122 }
123}
124
125
126
127#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
134#[cfg_attr(feature = "xdrs", derive(ReadXDR, WriteXDR, ConstXDRSize))]
135#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
136#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
137#[repr(C)]
138pub struct TxEmittedEvent {
139 pub contract_address: ContractAddress,
140 pub num_topics: u32,
142 pub serialized_event: BytesM<kMaxEventLength>,
143}
144
145#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
175#[cfg_attr(feature = "xdrs", derive(ReadXDR, WriteXDR, ConstXDRSize))]
176#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
177#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
178#[repr(C)]
179pub struct TxEventLog {
180 pub tx_hash: TransactionHash,
182 pub exec_result: ExecResult,
183 pub root_output: InvocationFrameOutput,
184 pub gas_consumed: GasAmount,
185 pub events: VecM<TxEmittedEvent, kMaxEventsPerTransaction>,
186}
187
188#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
196#[cfg_attr(feature = "xdrs", derive(ReadXDR, WriteXDR, ConstXDRSize))]
197#[cfg_attr(feature = "schema", derive(schemars::JsonSchema))]
198#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)]
199#[repr(C)]
200pub struct IdentifiedEvent {
201 pub tx_hash: TransactionHash,
203 pub block_height: BlockHeight,
204 pub sequence_number: u32,
206 pub emitted_event: TxEmittedEvent,
207}
208
209
210