use serde::{Deserialize, Serialize};
use crate::NodeId;
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
pub struct ActorTypeId(pub String);
#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord, Serialize, Deserialize)]
pub struct ActorId {
pub node: NodeId,
pub name: String,
pub instance: u32,
pub generation: u64,
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct ActorRegistration {
pub id: ActorId,
pub actor_type: ActorTypeId,
pub migratable: bool,
#[serde(default)]
pub mailbox_depth: u64,
#[serde(default)]
pub uptime_secs: u64,
#[serde(default)]
pub messages_per_sec: f64,
}
impl ActorRegistration {
#[must_use]
pub fn new(id: ActorId, actor_type: ActorTypeId, migratable: bool) -> Self {
Self {
id,
actor_type,
migratable,
mailbox_depth: 0,
uptime_secs: 0,
messages_per_sec: 0.0,
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub struct DirectoryUpdate {
pub node: NodeId,
pub epoch: u64,
pub registrations: Vec<ActorRegistration>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct RegisterAck {
pub applied: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ActorRef {
pub group: String,
pub key: Option<String>,
pub node: Option<NodeId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ActorEnvelope {
pub to: ActorId,
pub from: Option<ActorId>,
pub origin: Option<NodeId>,
pub req_id: u64,
pub payload: Vec<u8>,
pub reply_expected: bool,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct DeliverAck {
pub delivered: bool,
pub error: Option<String>,
pub reply: Option<Vec<u8>>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SpawnRequest {
pub name: String,
pub actor_type: ActorTypeId,
pub config: Vec<u8>,
pub generation: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct SpawnReply {
pub id: Option<ActorId>,
pub error: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ScaleRequest {
pub name: String,
pub actor_type: ActorTypeId,
pub total: u64,
pub config: Vec<u8>,
pub live_nodes: Vec<NodeId>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct ScaleReply {
pub error: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct StopRequest {
pub name: String,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct StopReply {
pub error: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MigrateRequest {
pub from: ActorId,
pub name: String,
pub actor_type: ActorTypeId,
pub config: Vec<u8>,
pub snapshot: Vec<u8>,
pub generation: u64,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct MigrateReply {
pub id: Option<ActorId>,
pub error: Option<String>,
}