1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91
pub mod uri_rules {
pub use regex::Regex;
pub struct WampUriRule {
pub loose: Regex,
pub strict: Regex
}
pub trait Rule {
fn rule(&self) -> WampUriRule;
}
pub enum EasyRule {
WithEmpty,
NoEmpty
}
impl Rule for EasyRule {
fn rule(&self) -> WampUriRule {
match &self {
EasyRule::WithEmpty => {
WampUriRule {
loose: Regex::new(r"^(([^\s\.#]+\.)|\.)*([^\s\.#]+)?$").unwrap(),
strict: Regex::new(r"^(([0-9a-z_]+\.)|\.)*([0-9a-z_]+)?$").unwrap()
}
},
EasyRule::NoEmpty => {
WampUriRule {
strict: Regex::new(r"^([0-9a-z_]+\.)*([0-9a-z_]+)$").unwrap(),
loose: Regex::new(r"^([^\s\.#]+\.)*([^\s\.#]+)$").unwrap()
}
}
}
}
}
/// Wamp URI Rules
/// Read More: https://wamp-proto.org/wamp_latest_ietf.html#section-16.1.2-11
pub enum WampRules {
Name,
URI,
Prefix,
PrefixOrWildcard,
}
impl Rule for WampRules {
fn rule(&self) -> WampUriRule {
match self {
WampRules::Name => {
WampUriRule {
loose: Regex::new(r"^[^\s\.#]+$").unwrap(),
strict: Regex::new(r"^[\da-z_]+$").unwrap()
}
}
WampRules::URI => {
WampUriRule {
loose: Regex::new(r"^([^\s\.#]+\.)*([^\s\.#]+)$").unwrap(),
strict: Regex::new(r"^([\da-z_]+\.)*([\da-z_]+)$").unwrap()
}
}
WampRules::PrefixOrWildcard => {
WampUriRule {
loose: Regex::new(r"^(([^\s\.#]+\.)|\.)*([^\s\.#]+)?$").unwrap(),
strict: Regex::new(r"^(([\da-z_]+\.)|\.)*([\da-z_]+)?$").unwrap()
}
}
WampRules::Prefix => {
WampUriRule {
loose: Regex::new(r"^([^\s\.#]+\.)*([^\s\.#]*)$").unwrap(),
strict: Regex::new(r"^([\da-z_]+\.)*([\da-z_]*)$").unwrap()
}
}
}
}
}
}
//pub struct URI(String);
//
//impl URI {
// pub fn validate<R: uri_rules::Rule>(r: R, v: String) -> Self {
// todo!();
// let rule = r.rule().loose;
// //let values = rule.capture
// }
//}