multiversx_sc/
log_util.rs

1use 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}