use crate::xml::ToXml; use quick_xml::events::{BytesEnd, BytesStart, Event}; /// Stream error condition /// /// [Spec](https://xmpp.org/rfcs/rfc6120.html#streams-error-conditions). pub enum StreamErrorKind { /// The server has experienced a misconfiguration or other internal error that prevents it from servicing the stream. InternalServerError, /// The server is being shut down and all active streams are being closed. SystemShutdown, } impl StreamErrorKind { pub fn from_str(s: &str) -> Option { match s { "internal-server-error" => Some(Self::InternalServerError), "system-shutdown" => Some(Self::SystemShutdown), _ => None, } } pub fn as_str(&self) -> &'static str { match self { Self::InternalServerError => "internal-server-error", Self::SystemShutdown => "system-shutdown", } } } pub struct StreamError { pub kind: StreamErrorKind, } impl ToXml for StreamError { fn serialize(&self, events: &mut Vec>) { events.push(Event::Start(BytesStart::new("stream:error"))); events.push(Event::Empty(BytesStart::new(format!( r#"{} xmlns="urn:ietf:params:xml:ns:xmpp-streams""#, self.kind.as_str() )))); events.push(Event::End(BytesEnd::new("stream:error"))); } }