IRC 消息、IRCv3 tags 和受限增量行解析
///|
test "PING matching PONG" {
let m = @irc.parse("PING :server.example\r\n")
let p = m.pong()
assert_eq(p.command, "PONG")
assert_eq(p.params, ["server.example"])
assert_eq(@irc.parse(p.encode()), p)
assert_true(
try {
ignore(@irc.parse("QUIT :bye\r\n").pong())
false
} catch {
_ => true
},
)
}///|
test "CAP negotiation lifecycle" {
let caps = @irc.Capabilities::new()
caps.observe(@irc.parse("CAP * LS :server-time"))
let request = caps.request(["server-time"])
assert_eq(request.command, "CAP")
assert_false(caps.enabled("server-time"))
caps.observe(@irc.parse("CAP * ACK server-time"))
assert_true(caps.enabled("server-time"))
caps.observe(@irc.parse("CAP nick DEL server-time"))
assert_false(caps.enabled("server-time"))
}pub struct SaslPlain {
payload : String
}pub struct Session {
caps : Capabilities
desired : Array[String]
pending : Map[String, Bool]
state : String
requested : Bool
auth_data : String
auth_state : String
}Install
Download zipIRC 消息、IRCv3 tags 和受限增量行解析