blob: ea6da964b77aabf5253b51926442acae0ab20ff6 [file] [log] [blame]
extern crate actions;
extern crate libc;
extern crate serde_json;
use actions::main as actionMain;
use serde_json::{Error, Value};
use std::collections::HashMap;
use std::env;
use std::fs::File;
use std::io::{self, stderr, stdout, Write};
use std::os::unix::io::FromRawFd;
fn main() {
let mut fd3 = unsafe { File::from_raw_fd(3) };
loop {
let mut buffer = String::new();
io::stdin().read_line(&mut buffer).unwrap();
let parsed_input: Result<HashMap<String, Value>, Error> = serde_json::from_str(&buffer);
let mut payload: HashMap<String, Value> = HashMap::new();
match parsed_input {
Ok(n) => {
for (key, val) in n {
if key == "value" {
let mut unparsed_payload: Result<HashMap<String, Value>, Error> =
serde_json::from_value(val);
match unparsed_payload {
Ok(value) => payload = value,
Err(err) => {
eprintln!("Error parsing value json: {}", err);
continue;
}
}
} else {
env::set_var(format!("__OW_{}", key.to_uppercase()), val.to_string());
}
}
}
Err(e) => {
eprintln!("Error: {}", e);
continue;
}
}
match serde_json::to_string(&actionMain(payload)) {
Ok(result) => {
writeln!(&mut fd3, "{}", result).expect("Error writing on fd3");
}
Err(err) => {
eprintln!("Error formatting result value json: {}", err);
}
}
stdout().flush().expect("Error flushing stdout");
stderr().flush().expect("Error flushing stderr");
}
}