use blueprint_core::error;
use tangle_subxt::{
subxt::{Config, events::Events},
tangle_testnet_runtime::api::services::events::{
Registered, RpcAddressUpdated, ServiceInitiated, ServiceRequestApproved,
ServiceRequestRejected, ServiceRequested, ServiceTerminated, Unregistered,
},
};
#[derive(Debug, Clone)]
pub enum BlockchainEvent {
Registered(Registered),
Unregistered(Unregistered),
RpcAddressUpdated(RpcAddressUpdated),
ServiceRequested(ServiceRequested),
ServiceRequestApproved(ServiceRequestApproved),
ServiceRequestRejected(ServiceRequestRejected),
ServiceInitiated(ServiceInitiated),
ServiceTerminated(ServiceTerminated),
Unknown(String),
}
pub async fn handle_events<T: Config>(events: Events<T>) -> Vec<BlockchainEvent> {
let mut blockchain_events = Vec::new();
for event in events.find::<Registered>() {
match event {
Ok(event) => blockchain_events.push(BlockchainEvent::Registered(event)),
Err(e) => error!("Error processing Registered event: {}", e),
}
}
for event in events.find::<Unregistered>() {
match event {
Ok(event) => blockchain_events.push(BlockchainEvent::Unregistered(event)),
Err(e) => error!("Error processing Unregistered event: {}", e),
}
}
for event in events.find::<RpcAddressUpdated>() {
match event {
Ok(event) => blockchain_events.push(BlockchainEvent::RpcAddressUpdated(event)),
Err(e) => error!("Error processing RpcAddressUpdated event: {}", e),
}
}
for event in events.find::<ServiceRequested>() {
match event {
Ok(event) => blockchain_events.push(BlockchainEvent::ServiceRequested(event)),
Err(e) => error!("Error processing ServiceRequested event: {}", e),
}
}
for event in events.find::<ServiceRequestApproved>() {
match event {
Ok(event) => blockchain_events.push(BlockchainEvent::ServiceRequestApproved(event)),
Err(e) => error!("Error processing ServiceRequestApproved event: {}", e),
}
}
for event in events.find::<ServiceRequestRejected>() {
match event {
Ok(event) => blockchain_events.push(BlockchainEvent::ServiceRequestRejected(event)),
Err(e) => error!("Error processing ServiceRequestRejected event: {}", e),
}
}
for event in events.find::<ServiceInitiated>() {
match event {
Ok(event) => blockchain_events.push(BlockchainEvent::ServiceInitiated(event)),
Err(e) => error!("Error processing ServiceInitiated event: {}", e),
}
}
for event in events.find::<ServiceTerminated>() {
match event {
Ok(event) => blockchain_events.push(BlockchainEvent::ServiceTerminated(event)),
Err(e) => error!("Error processing ServiceTerminated event: {}", e),
}
}
blockchain_events
}