use crate::{
error::{DispatchError, Error},
events::{EventMetadataDetails, RawEventDetails, RootEvent},
Metadata, Phase, StaticEvent,
};
use alloc::sync::Arc;
use codec::{Decode, Encode};
use scale_value::Composite;
#[derive(Debug, Clone, Encode, Decode)]
pub struct EventDetails<Hash: Encode + Decode> {
inner: RawEventDetails<Hash>,
metadata: Metadata,
}
impl<Hash: Encode + Decode> EventDetails<Hash> {
pub(crate) fn decode_from(
metadata: Metadata,
all_bytes: Arc<[u8]>,
start_idx: usize,
index: u32,
) -> Result<Self, Error> {
let inner = RawEventDetails::decode_from(&metadata, all_bytes, start_idx, index)?;
Ok(EventDetails { inner, metadata })
}
pub fn phase(&self) -> Phase {
self.inner.phase()
}
pub fn index(&self) -> u32 {
self.inner.index()
}
pub fn pallet_index(&self) -> u8 {
self.inner.pallet_index()
}
pub fn variant_index(&self) -> u8 {
self.inner.variant_index()
}
pub fn pallet_name(&self) -> &str {
self.inner.pallet_name()
}
pub fn variant_name(&self) -> &str {
self.inner.variant_name()
}
pub fn event_metadata(&self) -> EventMetadataDetails<'_> {
self.inner.event_metadata_unchecked(&self.metadata)
}
pub fn bytes(&self) -> &[u8] {
self.inner.bytes()
}
pub fn field_bytes(&self) -> &[u8] {
self.inner.field_bytes()
}
pub fn field_values(&self) -> Result<Composite<u32>, Error> {
self.inner.field_values_unchecked(&self.metadata)
}
pub fn as_event<E: StaticEvent>(&self) -> Result<Option<E>, Error> {
self.inner.as_event()
}
pub fn as_root_event<E: RootEvent>(&self) -> Result<E, Error> {
self.inner.as_root_event_unchecked(&self.metadata)
}
pub fn topics(&self) -> &[Hash] {
self.inner.topics()
}
pub fn to_raw(self) -> RawEventDetails<Hash> {
self.inner
}
}
impl<Hash: Encode + Decode> EventDetails<Hash> {
pub fn has_failed(&self) -> bool {
self.inner.has_failed()
}
pub fn get_associated_dispatch_error(&self) -> Option<DispatchError> {
self.inner.get_associated_dispatch_error(&self.metadata)
}
pub fn is_code_update(&self) -> bool {
self.inner.is_code_update()
}
}