hermes_runtime_components/traits/
runtime.rs1use 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")>;