hermes_runtime_components/traits/
runtime.rs

1use core::marker::PhantomData;
2
3use cgp::prelude::*;
4
5#[derive_component(RuntimeTypeComponent, ProvideRuntimeType<Context>)]
6pub trait HasRuntimeType: Async {
7    type Runtime: HasErrorType;
8}
9
10#[derive_component(RuntimeGetterComponent, RuntimeGetter<Context>)]
11pub trait HasRuntime: HasRuntimeType {
12    fn runtime(&self) -> &Self::Runtime;
13}
14
15pub type RuntimeOf<Context> = <Context as HasRuntimeType>::Runtime;
16
17pub struct ProvideRuntimeField<Field>(pub PhantomData<Field>);
18
19impl<Context, Field: Async, Runtime> ProvideRuntimeType<Context> for ProvideRuntimeField<Field>
20where
21    Context: HasField<Field, Field = Runtime> + Async,
22    Runtime: HasErrorType,
23{
24    type Runtime = Runtime;
25}
26
27impl<Context, Field: Async> RuntimeGetter<Context> for ProvideRuntimeField<Field>
28where
29    Context: HasRuntimeType + HasField<Field, Field = Context::Runtime>,
30{
31    fn runtime(context: &Context) -> &Context::Runtime {
32        context.get_field(PhantomData)
33    }
34}
35
36pub type ProvideDefaultRuntimeField = ProvideRuntimeField<symbol!("runtime")>;