Skip to main content

little_durable_objects/
host.rs

1mod actor_host;
2mod actor_runtime;
3mod lease_maintenance;
4mod process;
5
6use serde::{Deserialize, Serialize};
7use std::fmt;
8
9pub use self::process::{ActorHostConfig, serve_actor_host};
10pub(crate) use self::{
11    actor_host::ActorHost,
12    lease_maintenance::{HostLeaseMaintainer, LeaseRenewalTask},
13};
14
15#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
16#[serde(rename_all = "lowercase")]
17pub enum ActorProcessRole {
18    Workflow,
19    Host,
20}
21
22#[derive(Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
23pub struct HostId(String);
24
25impl HostId {
26    pub fn new<S>(id: S) -> Self
27    where
28        S: Into<String>,
29    {
30        Self(id.into())
31    }
32
33    pub fn as_str(&self) -> &str {
34        &self.0
35    }
36}
37
38impl fmt::Display for HostId {
39    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
40        f.write_str(&self.0)
41    }
42}
43
44#[derive(Clone, Debug, PartialEq, Eq)]
45pub(crate) struct HostEndpoint {
46    pub id: HostId,
47    pub route: String,
48}
49
50#[cfg(test)]
51mod tests {
52    use super::*;
53
54    #[test]
55    fn process_roles_use_current_names() -> anyhow::Result<()> {
56        assert_eq!(
57            serde_json::to_value(ActorProcessRole::Workflow)?,
58            "workflow"
59        );
60        assert_eq!(serde_json::to_value(ActorProcessRole::Host)?, "host");
61        assert!(serde_json::from_value::<ActorProcessRole>(serde_json::json!("caller")).is_err());
62        Ok(())
63    }
64}