roboticus_pipeline/
personality.rs1use roboticus_core::personality::{self, OsIdentity, OsVoice};
7
8pub struct PersonalityState {
10 pub os_text: String,
11 pub firmware_text: String,
12 pub identity: OsIdentity,
13 pub voice: OsVoice,
14}
15
16impl PersonalityState {
17 pub fn from_workspace(workspace: &std::path::Path) -> Self {
18 let os = personality::load_os(workspace);
19 let fw = personality::load_firmware(workspace);
20 let operator = personality::load_operator(workspace);
21 let directives = personality::load_directives(workspace);
22
23 let os_text =
24 personality::compose_identity_text(os.as_ref(), operator.as_ref(), directives.as_ref());
25 let firmware_text = personality::compose_firmware_text(fw.as_ref());
26
27 let (identity, voice) = match os {
28 Some(os) => (os.identity, os.voice),
29 None => (
30 OsIdentity {
31 name: String::new(),
32 version: "1.0".into(),
33 generated_by: "none".into(),
34 },
35 OsVoice::default(),
36 ),
37 };
38
39 Self {
40 os_text,
41 firmware_text,
42 identity,
43 voice,
44 }
45 }
46
47 pub fn empty() -> Self {
48 Self {
49 os_text: String::new(),
50 firmware_text: String::new(),
51 identity: OsIdentity {
52 name: String::new(),
53 version: "1.0".into(),
54 generated_by: "none".into(),
55 },
56 voice: OsVoice::default(),
57 }
58 }
59}