From: Ian Jackson Date: Sun, 15 Aug 2021 19:44:22 +0000 (+0100) Subject: server wip meta X-Git-Tag: hippotat/1.0.0~168 X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=hippotat.git;a=commitdiff_plain;h=8f036eef1ef8c3699a34041a35169859f4ab13fd server wip meta Signed-off-by: Ian Jackson --- diff --git a/src/bin/server.rs b/src/bin/server.rs index 1764470..bb1c6d6 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -280,53 +280,46 @@ async fn run_client(ic: Arc, ).context("resume parsing body, after auth checks")?; let mut meta = MetadataFieldIterator::new(&meta); -/* - macro_rules!( - - let target_requests_outstanding = { - let server = ic.target_requests_outstanding; - let client: u32 = meta.need_parse()?; - if client != server { - throw!(anyhow!("mismatch: client={} != server={}", - client, server)); - } - Ok::<_,AE>(client) - }.context("target_requests_outstanding")?; - - let http_timeout: u64 = { - let server = ic.http_timeout; - let client = Duration::from_secs(meta.need_parse()?); - if client > server { - throw!(anyhow!("mismatch: client={} > server={}", - client, server)); - } - Ok::<_,AE>(client) - }.context("http_timeout")?; - - let max_batch_down = { - let server = ic.max_batch_down; - let client: u32 = meta.parse().context("max_batch_down")?; - let to_use = min(client, server); - Ok::<_,AE>(to_use) - }.context("max_batch_down")?; - - let max_batch_up = { - let server = ic.max_batch_up; - let client = meta.parse().context("max_batch_up")?; - if client > server { - throw!(anyhow!("mismatch: client={} != server={}", - client, server)); + + macro_rules! meta { + { $v:ident, ( $( $badcmp:tt )? ), $ret:expr, + let $server:ident, $client:ident $($code:tt)* + } => { + let $v = (||{ + let $server = ic.$v; + let $client $($code)* + $( + if $client $badcmp $server { + throw!(anyhow!("mismatch: client={:?} {} server={:?}", + $client, stringify!($badcmp), $server)); + } + )? + Ok::<_,AE>($ret) + })().context(stringify!($v))?; + dbg!(&$v); } - - throw!(anyhow!( - "target_requests_outstanding mismatch: client={} server={}", - target_requests_outstanding, - ic.target_requests_outstanding - )) } - if ic. -*/ + meta!{ + target_requests_outstanding, ( != ), client, + let server, client: u32 = meta.need_parse()?; + } + + meta!{ + http_timeout, ( > ), client, + let server, client = Duration::from_secs(meta.need_parse()?); + } + + meta!{ + max_batch_down, (), min(client, server), + let server, client: u32 = meta.parse()?.unwrap_or(server); + } + + meta!{ + max_batch_up, ( > ), client, + let server, client = meta.parse()?.unwrap_or(server); + } + Ok::<_,AE>(()) }.await { Ok(()) => outstanding.push_back(Outstanding {