Skip to main content

forge_core/config/
node.rs

1//! Node role and capability configuration.
2
3use serde::{Deserialize, Serialize};
4
5/// Node role configuration.
6#[derive(Debug, Clone, Serialize, Deserialize)]
7#[non_exhaustive]
8pub struct NodeConfig {
9    /// Roles this node should assume.
10    #[serde(default = "default_roles")]
11    pub roles: Vec<NodeRole>,
12
13    /// Worker capabilities for job routing.
14    #[serde(default = "default_capabilities")]
15    pub worker_capabilities: Vec<String>,
16}
17
18impl Default for NodeConfig {
19    fn default() -> Self {
20        Self {
21            roles: default_roles(),
22            worker_capabilities: default_capabilities(),
23        }
24    }
25}
26
27fn default_roles() -> Vec<NodeRole> {
28    vec![
29        NodeRole::Gateway,
30        NodeRole::Function,
31        NodeRole::Worker,
32        NodeRole::Scheduler,
33    ]
34}
35
36fn default_capabilities() -> Vec<String> {
37    vec!["general".to_string()]
38}
39
40/// Available node roles.
41#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
42#[serde(rename_all = "lowercase")]
43#[non_exhaustive]
44pub enum NodeRole {
45    /// Serves HTTP/gRPC traffic.
46    Gateway,
47    /// Executes queries and mutations.
48    Function,
49    /// Processes background jobs.
50    Worker,
51    /// Runs cron schedules and leader-elected tasks.
52    Scheduler,
53}