1use crate::transport::{Event, EventType, File, Manifest, QueryType};
4use anyhow::Result;
5use std::process::exit;
6
7fn run_module() -> Result<()> {
8 let args: Vec<String> = std::env::args().collect();
10 if args.len() != 2 {
11 let error_event = Event {
12 class: EventType::Error("Invalid number of arguments".to_string()),
13 };
14 error_event.write_to_stderr()?;
15 exit(1)
16 }
17
18 let data = &args[1];
20
21 let apply_event = Event {
23 class: EventType::Apply(Manifest {
24 resources: vec![Box::new(File {
25 name: "test.txt".to_string(),
26 content: "Hello, World!".to_string(),
27 })],
28 }),
29 };
30 println!("{}", serde_json::to_string(&apply_event)?);
31
32 let recv_event: Event = match serde_json::from_str(&data) {
35 Ok(event) => event,
36 Err(_) => {
37 let error_event = Event {
38 class: EventType::Error("Invalid event".to_string()),
39 };
40 error_event.write_to_stderr()?;
41 exit(1)
42 }
43 };
44
45 let reply_event = match recv_event.class {
47 EventType::Query(QueryType::Health) => Event {
48 class: EventType::Reply("OK".to_string()),
49 },
50
51 EventType::Query(QueryType::Features) => Event {
52 class: EventType::Reply("Feature 1, Feature 2".to_string()),
53 },
54
55 EventType::Apply(manifest) => {
56 manifest.resources.iter().for_each(|r| {
57 if let Err(e) = r.apply() {
58 let error_event = Event {
59 class: EventType::Error(format!("Error applying resource: {}", e)),
60 };
61 error_event.write_to_stderr().unwrap();
62 exit(1);
63 }
64 });
65 Event {
66 class: EventType::Reply("Applied Manifest".to_string()),
67 }
68 }
69
70 _ => Event {
71 class: EventType::Error("Invalid event type".to_string()),
72 },
73 };
74
75 reply_event.write_to_stdout()?;
76
77 Ok(())
78}