websocket_std/
extension.rs1use std::collections::HashMap;
2
3#[allow(dead_code)]
4pub struct Extension {
5 name: String,
6 params: Vec<Parameter>
7}
8
9impl Extension {
10 pub fn new(name: String, params: Vec<Parameter>) -> Self {
11 Extension { name, params }
12 }
13}
14
15#[allow(dead_code)]
16pub struct Parameter {
17 name: String,
18 args: Option<HashMap<String, Option<String>>>
19}
20
21impl Parameter {
22 pub fn new(name: String, args: Option<HashMap<String, Option<String>>>) -> Self {
23 Parameter { name, args }
24 }
25}
26
27#[macro_export]
28macro_rules! parameter {
29 ($n:expr) => { Parameter::new($n.to_string(), None) };
30 ($n:expr; $($arg:expr),*) => {
31 {
32 let mut args: HashMap<String, Option<String>> = HashMap::new();
33
34 $(
35 let arg_val = String::from($arg);
36 let index = arg_val.find('=');
37
38 match index {
39 Some(i) => {
40 let arg = (&arg_val[0..i]).trim().to_string();
41 let val = (&arg_val[i+1..arg_val.len()]).trim().to_string();
42 args.insert(arg, Some(val));
43 },
44 None => { args.insert(arg_val, None); }
45 }
46 )*
47 Parameter::new($n.to_string(), Some(args))
48 }
49 };
50}