Skip to main content

rustyclaw_core/canvas/
config.rs

1//! Canvas configuration.
2
3use serde::{Deserialize, Serialize};
4use std::path::PathBuf;
5
6/// Canvas configuration.
7#[derive(Debug, Clone, Serialize, Deserialize)]
8pub struct CanvasConfig {
9    /// Whether canvas is enabled
10    #[serde(default = "default_enabled")]
11    pub enabled: bool,
12
13    /// Port for the canvas host server
14    #[serde(default = "default_port")]
15    pub port: u16,
16
17    /// Root directory for canvas files
18    #[serde(default)]
19    pub root: Option<PathBuf>,
20
21    /// Whether to enable A2UI support
22    #[serde(default = "default_a2ui")]
23    pub a2ui: bool,
24}
25
26fn default_enabled() -> bool {
27    true
28}
29
30fn default_port() -> u16 {
31    18789 // Same as OpenClaw
32}
33
34fn default_a2ui() -> bool {
35    true
36}
37
38impl Default for CanvasConfig {
39    fn default() -> Self {
40        Self {
41            enabled: true,
42            port: 18789,
43            root: None,
44            a2ui: true,
45        }
46    }
47}
48
49impl CanvasConfig {
50    /// Get the canvas root directory, defaulting to workspace/canvas
51    pub fn canvas_root(&self, workspace: &std::path::Path) -> PathBuf {
52        self.root
53            .clone()
54            .unwrap_or_else(|| workspace.join("canvas"))
55    }
56
57    /// Get the session canvas directory
58    pub fn session_dir(&self, workspace: &std::path::Path, session: &str) -> PathBuf {
59        self.canvas_root(workspace).join(session)
60    }
61}