little_durable_objects/
host.rs1mod 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}