diff options
author | Profpatsch <mail@profpatsch.de> | 2021-02-09T00·38+0100 |
---|---|---|
committer | Profpatsch <mail@profpatsch.de> | 2021-02-09T01·36+0000 |
commit | 2f3e4ec3caae60afc6dd37f0a3bedd150437436f (patch) | |
tree | 28c7230825931aa70fd67bda7012d4d796a0f7ad /users/Profpatsch | |
parent | fd0d0764ecd67d82fb331074a47a6f8c089b81ce (diff) |
feat(users/Profpatsch/read-http): use netencode::dec for arglib r/2195
Interestingly, the code is not any shorter, but a lot more declarative, and all parsing footwork and error message generation is done by the `Decoder` trait. \o/ Change-Id: Idb1064a3b5198e38e06e1860d4d71054ae53bbb9 Reviewed-on: https://cl.tvl.fyi/c/depot/+/2499 Tested-by: BuildkiteCI Reviewed-by: Profpatsch <mail@profpatsch.de>
Diffstat (limited to 'users/Profpatsch')
-rw-r--r-- | users/Profpatsch/read-http.rs | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/users/Profpatsch/read-http.rs b/users/Profpatsch/read-http.rs index 0c168a733831..afbfbfdb6714 100644 --- a/users/Profpatsch/read-http.rs +++ b/users/Profpatsch/read-http.rs @@ -10,7 +10,8 @@ use std::io::Write; use std::collections::HashMap; use exec_helpers::{die_user_error, die_expected_error, die_temporary}; -use netencode::{U, T}; +use netencode::{U, T, dec}; +use netencode::dec::Decoder; enum What { Request, @@ -21,20 +22,18 @@ enum What { // The keys are text, but can be lists of text iff headers appear multiple times, so beware. fn main() -> std::io::Result<()> { - let what : What = match arglib_netencode::arglib_netencode("read-http", None) { - T::Record(rec) => match rec.get("what") { - Some(T::Text(t)) => match t.as_str() { - "request" => What::Request, - "response" => What::Response, - _ => die_user_error("read-http", "`what` should be either t:request or t:response"), - }, - Some(o) => die_user_error("read-http", format!("expected a record of text, got {:#?}", o)), - None => { - eprintln!("read-http arglib: no `what` given, defaulting to Response"); - What::Response - } + let args = dec::RecordDot { + field: "what", + inner: dec::OneOf { + list: vec!["request", "response"], + inner: dec::Text } - o => die_user_error("read-http arglib", format!("expected a record, got {:#?}", o)) + }; + let what : What = match args.dec(arglib_netencode::arglib_netencode("read-http", None).to_u()) { + Ok("request") => What::Request, + Ok("response") => What::Response, + Ok(v) => panic!("shouldn’t happen!, value was: {}", v), + Err(dec::DecodeError(err)) => die_user_error("read-http", err), }; fn read_stdin_to_complete<F>(mut parse: F) -> () |