Skip to main content

mur_common/companion/
mod.rs

1//! Companion subsystem shared types (Phase 1.1).
2
3pub mod content_seed;
4pub mod voice_template;
5
6use serde::{Deserialize, Serialize};
7
8#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
9#[serde(rename_all = "snake_case")]
10pub enum Relationship {
11    #[default]
12    Friend,
13    Coach,
14    AccountabilityBuddy,
15    Mentor,
16}
17
18#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
19#[serde(rename_all = "snake_case")]
20pub enum Formality {
21    Casual,
22    #[default]
23    Neutral,
24    Formal,
25}
26
27#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
28#[serde(rename_all = "snake_case")]
29pub enum Situation {
30    MorningGreeting,
31    GentleCheckIn,
32    ShareQuote,
33    ShareLink,
34    WorkflowNudge,
35}
36
37#[cfg(test)]
38mod tests {
39    use super::*;
40
41    #[test]
42    fn workflow_nudge_situation_serializes_snake_case() {
43        assert_eq!(
44            serde_json::to_string(&Situation::WorkflowNudge).unwrap(),
45            "\"workflow_nudge\""
46        );
47        let back: Situation = serde_json::from_str("\"workflow_nudge\"").unwrap();
48        assert_eq!(back, Situation::WorkflowNudge);
49    }
50}
51
52#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
53#[serde(rename_all = "snake_case")]
54pub enum Signal {
55    Positive,
56    Negative,
57    Dismiss,
58    Sent,
59}