gloo_worker/reactor/
registrar.rs

1use 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
13/// A registrar for reactor workers.
14pub 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    /// Creates a new reactor registrar.
38    pub fn new() -> Self {
39        Self {
40            inner: ReactorWorker::<R>::registrar().encoding::<CODEC>(),
41        }
42    }
43
44    /// Sets the encoding.
45    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    /// Registers the worker.
55    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}