Skip to content

Commit 9d79c4b

Browse files
author
Bruce Adams
committed
Use more of serde's superpowers
1 parent fccd2ed commit 9d79c4b

File tree

3 files changed

+76
-30
lines changed

3 files changed

+76
-30
lines changed

rust1.32/src/Cargo.lock

Lines changed: 48 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

rust1.32/src/action_loop/Cargo.toml

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ version = "0.1.0"
44
authors = ["Roberto Diaz <roberto@theagilemonkeys.com>"]
55

66
[dependencies]
7+
serde = "1.0"
8+
serde_derive = "1.0"
79
serde_json = "1.0"
810
libc = "0.2.49"
9-
actions = { path = "../actions" }
11+
actions = { path = "../actions" }

rust1.32/src/action_loop/src/main.rs

Lines changed: 25 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,48 @@
11
extern crate actions;
22
extern crate libc;
3+
extern crate serde;
4+
extern crate serde_derive;
35
extern crate serde_json;
46

57
use actions::main as actionMain;
8+
use serde_derive::Deserialize;
9+
610
use serde_json::{Error, Value};
711
use std::collections::HashMap;
812
use std::env;
913
use std::fs::File;
10-
use std::io::{self, stderr, stdout, Write};
14+
use std::io::{stderr, stdin, stdout, Write};
1115
use std::os::unix::io::FromRawFd;
1216

17+
#[derive(Debug, Clone, PartialEq, Deserialize)]
18+
struct Input {
19+
value: HashMap<String, Value>,
20+
#[serde(flatten)]
21+
environment: HashMap<String, Value>,
22+
}
23+
1324
fn main() {
1425
let mut fd3 = unsafe { File::from_raw_fd(3) };
1526
loop {
1627
let mut buffer = String::new();
17-
io::stdin().read_line(&mut buffer).unwrap();
18-
let parsed_input: Result<HashMap<String, Value>, Error> = serde_json::from_str(&buffer);
19-
let mut payload: HashMap<String, Value> = HashMap::new();
28+
stdin().read_line(&mut buffer).unwrap();
29+
let parsed_input: Result<Input, Error> = serde_json::from_str(&buffer);
2030
match parsed_input {
21-
Ok(n) => {
22-
for (key, val) in n {
23-
if key == "value" {
24-
let mut unparsed_payload: Result<HashMap<String, Value>, Error> =
25-
serde_json::from_value(val);
26-
match unparsed_payload {
27-
Ok(value) => payload = value,
28-
Err(err) => {
29-
eprintln!("Error parsing value json: {}", err);
30-
continue;
31-
}
32-
}
33-
} else {
34-
env::set_var(format!("__OW_{}", key.to_uppercase()), val.to_string());
31+
Ok(input) => {
32+
for (key, val) in input.environment {
33+
env::set_var(format!("__OW_{}", key.to_uppercase()), val.to_string());
34+
}
35+
match serde_json::to_string(&actionMain(input.value)) {
36+
Ok(result) => {
37+
writeln!(&mut fd3, "{}", result).expect("Error writing on fd3");
38+
}
39+
Err(err) => {
40+
eprintln!("Error formatting result value json: {}", err);
3541
}
3642
}
3743
}
38-
Err(e) => {
39-
eprintln!("Error: {}", e);
40-
continue;
41-
}
42-
}
43-
44-
match serde_json::to_string(&actionMain(payload)) {
45-
Ok(result) => {
46-
writeln!(&mut fd3, "{}", result).expect("Error writing on fd3");
47-
}
4844
Err(err) => {
49-
eprintln!("Error formatting result value json: {}", err);
45+
eprintln!("Error parsing input: {}", err);
5046
}
5147
}
5248
stdout().flush().expect("Error flushing stdout");

0 commit comments

Comments
 (0)