1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
use std::sync::Arc;

use async_trait::async_trait;
use cnidarium::{StateRead, StateWrite};
use filament_chain::Transaction;

mod input;
mod transaction;

// TODO(xla): Document.
#[async_trait]
pub trait Handler {
    async fn validate(&self, tx: Arc<Transaction>) -> eyre::Result<()>;
    async fn check<S: StateRead>(&self, state: Arc<S>) -> eyre::Result<()>;
    async fn execute<S: StateWrite>(&self, state: &mut S) -> eyre::Result<()>;
}