Added support for metadata-notify.
This commit is contained in:
parent
ad2d3911ca
commit
613b1c85ae
2 changed files with 20 additions and 7 deletions
|
@ -30,6 +30,8 @@ pub enum Capability {
|
||||||
UserhostInNames,
|
UserhostInNames,
|
||||||
/// [metadata](http://ircv3.net/specs/core/metadata-3.2.html)
|
/// [metadata](http://ircv3.net/specs/core/metadata-3.2.html)
|
||||||
Metadata,
|
Metadata,
|
||||||
|
/// [metadata-notify](http://ircv3.net/specs/core/metadata-3.2.html)
|
||||||
|
MetadataNotify,
|
||||||
/// Custom IRCv3 capability extensions
|
/// Custom IRCv3 capability extensions
|
||||||
Custom(&'static str),
|
Custom(&'static str),
|
||||||
}
|
}
|
||||||
|
@ -58,6 +60,7 @@ impl AsRef<str> for Capability {
|
||||||
Capability::ServerTime => "server-time",
|
Capability::ServerTime => "server-time",
|
||||||
Capability::UserhostInNames => "userhost-in-names",
|
Capability::UserhostInNames => "userhost-in-names",
|
||||||
Capability::Metadata => "metadata",
|
Capability::Metadata => "metadata",
|
||||||
|
Capability::MetadataNotify => "metadata-notify",
|
||||||
Capability::Custom(s) => s,
|
Capability::Custom(s) => s,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -82,6 +85,7 @@ mod test {
|
||||||
assert_eq!(ServerTime.as_ref(), "server-time");
|
assert_eq!(ServerTime.as_ref(), "server-time");
|
||||||
assert_eq!(UserhostInNames.as_ref(), "userhost-in-names");
|
assert_eq!(UserhostInNames.as_ref(), "userhost-in-names");
|
||||||
assert_eq!(Metadata.as_ref(), "metadata");
|
assert_eq!(Metadata.as_ref(), "metadata");
|
||||||
|
assert_eq!(MetadataNotify.as_ref(), "metadata-notify");
|
||||||
assert_eq!(Custom("example").as_ref(), "example");
|
assert_eq!(Custom("example").as_ref(), "example");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -158,7 +158,7 @@ pub enum Command {
|
||||||
|
|
||||||
// IRCv3.2 extensions
|
// IRCv3.2 extensions
|
||||||
/// METADATA target COMMAND [params] :[param]
|
/// METADATA target COMMAND [params] :[param]
|
||||||
METADATA(String, MetadataSubCommand, Option<Vec<String>>, Option<String>),
|
METADATA(String, Option<MetadataSubCommand>, Option<Vec<String>>, Option<String>),
|
||||||
/// MONITOR command [nicklist]
|
/// MONITOR command [nicklist]
|
||||||
MONITOR(String, Option<String>),
|
MONITOR(String, Option<String>),
|
||||||
/// CHGHOST user host
|
/// CHGHOST user host
|
||||||
|
@ -335,11 +335,16 @@ impl Into<Message> for Command {
|
||||||
Command::ACCOUNT(a) =>
|
Command::ACCOUNT(a) =>
|
||||||
Message::from_owned(None, string("ACCOUNT"), Some(vec![a]), None),
|
Message::from_owned(None, string("ACCOUNT"), Some(vec![a]), None),
|
||||||
|
|
||||||
Command::METADATA(t, c, None, p) =>
|
Command::METADATA(t, Some(c), None, p) =>
|
||||||
Message::from_owned(None, string("METADATA"), Some(vec![t, c.string()]), p),
|
Message::from_owned(None, string("METADATA"), Some(vec![t, c.string()]), p),
|
||||||
Command::METADATA(t, c, Some(a), p) =>
|
Command::METADATA(t, Some(c), Some(a), p) =>
|
||||||
Message::from_owned(None, string("METADATA"),
|
Message::from_owned(None, string("METADATA"),
|
||||||
Some(vec![t, c.string()].into_iter().chain(a).collect()), p),
|
Some(vec![t, c.string()].into_iter().chain(a).collect()), p),
|
||||||
|
Command::METADATA(t, None, None, p) =>
|
||||||
|
Message::from_owned(None, string("METADATA"), Some(vec![t]), p),
|
||||||
|
Command::METADATA(t, None, Some(a), p) =>
|
||||||
|
Message::from_owned(None, string("METADATA"),
|
||||||
|
Some(vec![t].into_iter().chain(a).collect()), p),
|
||||||
Command::MONITOR(c, Some(t)) =>
|
Command::MONITOR(c, Some(t)) =>
|
||||||
Message::from_owned(None, string("MONITOR"), Some(vec![c, t]), None),
|
Message::from_owned(None, string("MONITOR"), Some(vec![c, t]), None),
|
||||||
Command::MONITOR(c, None) =>
|
Command::MONITOR(c, None) =>
|
||||||
|
@ -1097,15 +1102,19 @@ impl<'a> From<&'a Message> for Result<Command> {
|
||||||
match m.suffix {
|
match m.suffix {
|
||||||
Some(_) => return Err(invalid_input()),
|
Some(_) => return Err(invalid_input()),
|
||||||
None => match m.args[1].parse() {
|
None => match m.args[1].parse() {
|
||||||
Ok(c) => Command::METADATA(m.args[0].clone(), c, None, None),
|
Ok(c) => Command::METADATA(m.args[0].clone(), Some(c), None, None),
|
||||||
Err(_) => return Err(invalid_input()),
|
Err(_) => return Err(invalid_input()),
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
} else if m.args.len() > 2 {
|
} else if m.args.len() > 2 {
|
||||||
match m.args[1].parse() {
|
match m.args[1].parse() {
|
||||||
Ok(c) => Command::METADATA(m.args[0].clone(), c, Some(m.args[1..].to_owned()),
|
Ok(c) => Command::METADATA(m.args[0].clone(), Some(c),
|
||||||
m.suffix.clone()),
|
Some(m.args[1..].to_owned()), m.suffix.clone()),
|
||||||
Err(_) => return Err(invalid_input()),
|
Err(_) => if m.args.len() == 3 && m.suffix.is_some() {
|
||||||
|
Command::METADATA(m.args[0].clone(), None, Some(m.args[1..].to_owned()), m.suffix.clone())
|
||||||
|
} else {
|
||||||
|
return Err(invalid_input())
|
||||||
|
},
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
return Err(invalid_input())
|
return Err(invalid_input())
|
||||||
|
|
Loading…
Add table
Reference in a new issue