use std::collections::BTreeMap;
use crate::rpc_builder::RpcBuilder;
#[derive(Debug)]
pub struct HandlerType {
pub name: String,
pub signature: String,
}
pub trait Handler<AppCtx> {
fn register(rpc_builder: RpcBuilder<AppCtx>) -> RpcBuilder<AppCtx>;
fn get_type() -> HandlerType;
fn add_dependencies(dependencies: &mut BTreeMap<String, String>);
}
#[derive(Clone)]
pub(crate) struct HandlerCallbacks<Ctx> {
pub register: fn(RpcBuilder<Ctx>) -> RpcBuilder<Ctx>,
pub get_type: fn() -> HandlerType,
pub add_dependencies: fn(&mut BTreeMap<String, String>),
}
impl<Ctx> HandlerCallbacks<Ctx>
where
Ctx: 'static + Send + Sync + Clone,
{
pub(crate) fn from_handler<H: Handler<Ctx>>(_handler: H) -> Self {
Self {
register: H::register,
get_type: H::get_type,
add_dependencies: H::add_dependencies,
}
}
}