supercode_interchange/world/
profile.rs1use std::collections::BTreeMap;
5use std::path::PathBuf;
6
7use schemars::JsonSchema;
8use serde::{Deserialize, Serialize};
9use serde_json::Value;
10
11use super::{Access, ChannelConfig, Fire, Job, Obligation, Route, WebhookSubscription, WorkerSpec};
12use crate::ontology::{Binding, SurfaceKey};
13
14#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
16pub struct PersonaRef {
17 pub path: String,
19 #[serde(default)]
21 pub text: Option<String>,
22 pub sha256: String,
24}
25
26#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, JsonSchema, Default)]
29#[serde(rename_all = "snake_case")]
30pub enum ExpiryScope {
31 #[default]
33 PerChat,
34 PerUserInGroup,
36 PerThread,
38}
39
40#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
42pub struct ExpiryPolicy {
43 #[serde(default = "default_idle_minutes")]
45 pub idle_minutes: u32,
46 #[serde(default)]
48 pub daily_reset_hour: Option<u8>,
49 #[serde(default)]
51 pub scope: ExpiryScope,
52}
53
54fn default_idle_minutes() -> u32 {
55 1440
56}
57
58impl Default for ExpiryPolicy {
59 fn default() -> Self {
60 Self {
61 idle_minutes: 1440,
62 daily_reset_hour: None,
63 scope: ExpiryScope::PerChat,
64 }
65 }
66}
67
68#[derive(Debug, Clone, Default, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
70pub struct ProfileResidue {
71 #[serde(default)]
73 pub config: BTreeMap<String, Value>,
74 #[serde(default)]
76 pub files: Vec<String>,
77}
78
79#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
81pub struct Profile {
82 pub name: String,
84 pub dir: PathBuf,
86 #[serde(default)]
88 pub worker: Option<WorkerSpec>,
89 #[serde(default)]
91 pub persona: Option<PersonaRef>,
92 #[serde(default)]
94 pub channels: BTreeMap<String, ChannelConfig>,
95 #[serde(default)]
97 pub routes: Vec<Route>,
98 #[serde(default)]
100 pub expiry: ExpiryPolicy,
101 #[serde(default)]
103 pub home: Option<SurfaceKey>,
104 #[serde(default)]
106 pub jobs: BTreeMap<String, Job>,
107 #[serde(default)]
109 pub subscriptions: BTreeMap<String, WebhookSubscription>,
110 #[serde(default)]
112 pub access: Access,
113 #[serde(default)]
116 pub bindings: BTreeMap<String, Binding>,
117 #[serde(default)]
119 pub fires: Vec<Fire>,
120 #[serde(default)]
122 pub obligations: Vec<Obligation>,
123 #[serde(default)]
125 pub residue: ProfileResidue,
126}
127
128#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
131pub struct World {
132 pub root: PathBuf,
134 pub profiles: BTreeMap<String, Profile>,
136}