multiversx_sc/
log_util.rs1use unwrap_infallible::UnwrapInfallible;
2
3use crate::codec::{TopEncode, TopEncodeMulti};
4
5use crate::{
6 api::{ErrorApi, LogApi, LogApiImpl, ManagedTypeApi},
7 contract_base::ExitCodecErrorHandler,
8 err_msg,
9 types::{ManagedBuffer, ManagedType, ManagedVec},
10};
11
12pub fn event_topic_accumulator<A>(event_identifier: &[u8]) -> ManagedVec<A, ManagedBuffer<A>>
13where
14 A: ErrorApi + ManagedTypeApi,
15{
16 let mut accumulator = ManagedVec::new();
17 accumulator.push(ManagedBuffer::new_from_bytes(event_identifier));
18 accumulator
19}
20
21pub fn serialize_event_topic<A, T>(accumulator: &mut ManagedVec<A, ManagedBuffer<A>>, topic: T)
22where
23 A: ErrorApi + ManagedTypeApi,
24 T: TopEncodeMulti,
25{
26 topic
27 .multi_encode_or_handle_err(
28 accumulator,
29 ExitCodecErrorHandler::<A>::from(err_msg::LOG_TOPIC_ENCODE_ERROR),
30 )
31 .unwrap_infallible();
32}
33
34pub fn serialize_log_data<T, A>(data: T) -> ManagedBuffer<A>
35where
36 T: TopEncode,
37 A: ErrorApi + ManagedTypeApi,
38{
39 let mut data_buffer = ManagedBuffer::new();
40 data.top_encode_or_handle_err(
41 &mut data_buffer,
42 ExitCodecErrorHandler::<A>::from(err_msg::LOG_DATA_ENCODE_ERROR),
43 )
44 .unwrap_infallible();
45 data_buffer
46}
47
48pub fn write_log<A>(topics: &ManagedVec<A, ManagedBuffer<A>>, data: &ManagedBuffer<A>)
49where
50 A: LogApi + ManagedTypeApi,
51{
52 A::log_api_impl().managed_write_log(topics.get_handle(), data.get_handle());
53}