gloo_worker/reactor/
registrar.rs1use std::fmt;
2
3use serde::de::Deserialize;
4use serde::ser::Serialize;
5
6use super::scope::ReactorScoped;
7use super::traits::Reactor;
8use super::worker::ReactorWorker;
9use crate::actor::WorkerRegistrar;
10use crate::codec::{Bincode, Codec};
11use crate::traits::Registrable;
12
13pub struct ReactorRegistrar<R, CODEC = Bincode>
15where
16 R: Reactor + 'static,
17 CODEC: Codec + 'static,
18{
19 inner: WorkerRegistrar<ReactorWorker<R>, CODEC>,
20}
21
22impl<R, CODEC> Default for ReactorRegistrar<R, CODEC>
23where
24 R: Reactor + 'static,
25 CODEC: Codec + 'static,
26{
27 fn default() -> Self {
28 Self::new()
29 }
30}
31
32impl<R, CODEC> ReactorRegistrar<R, CODEC>
33where
34 R: Reactor + 'static,
35 CODEC: Codec + 'static,
36{
37 pub fn new() -> Self {
39 Self {
40 inner: ReactorWorker::<R>::registrar().encoding::<CODEC>(),
41 }
42 }
43
44 pub fn encoding<C>(&self) -> ReactorRegistrar<R, C>
46 where
47 C: Codec + 'static,
48 {
49 ReactorRegistrar {
50 inner: self.inner.encoding::<C>(),
51 }
52 }
53
54 pub fn register(&self)
56 where
57 <R::Scope as ReactorScoped>::Input: Serialize + for<'de> Deserialize<'de>,
58 <R::Scope as ReactorScoped>::Output: Serialize + for<'de> Deserialize<'de>,
59 {
60 self.inner.register()
61 }
62}
63
64impl<R, CODEC> fmt::Debug for ReactorRegistrar<R, CODEC>
65where
66 R: Reactor + 'static,
67 CODEC: Codec + 'static,
68{
69 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
70 f.debug_struct("ReactorRegistrar<_>").finish()
71 }
72}