#![warn(missing_docs)]
pub mod ext;
pub mod protocols;
#[cfg(feature = "snark")]
pub mod snark;
pub mod transport;
pub mod types;
use std::result::Result;
use std::sync::Arc;
use async_trait::async_trait;
use rings_core::message::CustomMessage;
use rings_core::message::Message;
use rings_core::message::MessagePayload;
use rings_core::message::MessageVerificationExt;
use rings_core::swarm::callback::SwarmCallback;
use crate::extension::ext::Envelope;
use crate::extension::ext::Extensions;
use crate::provider::Provider;
pub struct Backend {
extensions: Extensions,
}
impl Backend {
pub fn new(provider: Arc<Provider>) -> Self {
Self {
extensions: provider.extensions(),
}
}
}
#[cfg_attr(feature = "browser", async_trait(?Send))]
#[cfg_attr(not(feature = "browser"), async_trait)]
impl SwarmCallback for Backend {
async fn on_inbound(&self, payload: &MessagePayload) -> Result<(), Box<dyn std::error::Error>> {
let data: Message = payload.transaction.data()?;
let Message::CustomMessage(CustomMessage(msg)) = data else {
return Ok(());
};
let envelope = Envelope::decode(&msg)?;
let from = payload.transaction.signer();
self.extensions.dispatch(from, envelope).await?;
Ok(())
}
}