websocket_std/
extension.rs

1use 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}