Skip to main content

little_durable_objects/
host.rs

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