From 444b608e9638a0dc37b4bf280737edbeed620230 Mon Sep 17 00:00:00 2001 From: Nikita Vilunov Date: Sat, 30 Sep 2023 15:43:46 +0000 Subject: [PATCH] split proto xmpp defs into its own crate (#14) Reviewed-on: https://git.vilunov.me/lavina/lavina/pulls/14 --- Cargo.lock | 15 +++++++- Cargo.toml | 13 ++++--- crates/proto-xmpp/Cargo.toml | 12 ++++++ .../xmpp => crates/proto-xmpp/src}/bind.rs | 24 ++++++------ .../xmpp => crates/proto-xmpp/src}/client.rs | 13 ++++--- .../xmpp => crates/proto-xmpp/src}/disco.rs | 4 +- .../mod.rs => crates/proto-xmpp/src/lib.rs | 11 +++++- .../xmpp => crates/proto-xmpp/src}/muc/mod.rs | 20 +++++----- crates/proto-xmpp/src/prelude.rs | 3 ++ .../xmpp => crates/proto-xmpp/src}/roster.rs | 4 +- .../xmpp => crates/proto-xmpp/src}/sasl.rs | 12 +++--- .../xmpp => crates/proto-xmpp/src}/session.rs | 8 ++-- .../proto-xmpp/src}/stanzaerror.rs | 0 .../xmpp => crates/proto-xmpp/src}/stream.rs | 6 +-- .../xmpp => crates/proto-xmpp/src}/tls.rs | 5 ++- .../proto-xmpp/src}/xml/ignore.rs | 0 .../proto-xmpp/src/xml/mod.rs | 8 ++-- src/main.rs | 1 - src/projections/xmpp/mod.rs | 37 +++++++++---------- src/projections/xmpp/proto.rs | 12 +++--- src/protos/mod.rs | 2 - src/util/mod.rs | 1 - 22 files changed, 125 insertions(+), 86 deletions(-) create mode 100644 crates/proto-xmpp/Cargo.toml rename {src/protos/xmpp => crates/proto-xmpp/src}/bind.rs (89%) rename {src/protos/xmpp => crates/proto-xmpp/src}/client.rs (99%) rename {src/protos/xmpp => crates/proto-xmpp/src}/disco.rs (99%) rename src/protos/xmpp/mod.rs => crates/proto-xmpp/src/lib.rs (78%) rename {src/protos/xmpp => crates/proto-xmpp/src}/muc/mod.rs (86%) create mode 100644 crates/proto-xmpp/src/prelude.rs rename {src/protos/xmpp => crates/proto-xmpp/src}/roster.rs (96%) rename {src/protos/xmpp => crates/proto-xmpp/src}/sasl.rs (83%) rename {src/protos/xmpp => crates/proto-xmpp/src}/session.rs (86%) rename {src/protos/xmpp => crates/proto-xmpp/src}/stanzaerror.rs (100%) rename {src/protos/xmpp => crates/proto-xmpp/src}/stream.rs (98%) rename {src/protos/xmpp => crates/proto-xmpp/src}/tls.rs (91%) rename {src/util => crates/proto-xmpp/src}/xml/ignore.rs (100%) rename src/util/xml.rs => crates/proto-xmpp/src/xml/mod.rs (96%) delete mode 100644 src/protos/mod.rs diff --git a/Cargo.lock b/Cargo.lock index 80a40aa..2469e90 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -854,12 +854,11 @@ dependencies = [ "futures-util", "http-body-util", "hyper 1.0.0-rc.3", - "lazy_static", "mgmt-api", - "nom", "nonempty", "prometheus", "proto-irc", + "proto-xmpp", "quick-xml", "regex", "reqwest", @@ -1267,6 +1266,18 @@ dependencies = [ "tokio", ] +[[package]] +name = "proto-xmpp" +version = "0.0.1-dev" +dependencies = [ + "anyhow", + "derive_more", + "lazy_static", + "quick-xml", + "regex", + "tokio", +] + [[package]] name = "quick-xml" version = "0.30.0" diff --git a/Cargo.toml b/Cargo.toml index f8f0d55..4c90804 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -2,6 +2,7 @@ members = [ ".", "crates/proto-irc", + "crates/proto-xmpp", "crates/mgmt-api", ] @@ -15,6 +16,10 @@ tokio = { version = "1.24.1", features = ["full"] } # async runtime futures-util = "0.3.25" anyhow = "1.0.68" # error utils nonempty = "0.8.1" +quick-xml = { version = "0.30.0", features = ["async-tokio"] } +lazy_static = "1.4.0" +regex = "1.7.1" +derive_more = "0.99.17" clap = { version = "4.4.4", features = ["derive"] } serde = { version = "1.0.152", features = ["rc", "serde_derive"] } @@ -36,17 +41,15 @@ tracing = "0.1.37" # logging & tracing api tracing-subscriber = "0.3.16" futures-util.workspace = true prometheus = { version = "0.13.3", default-features = false } -regex = "1.7.1" -lazy_static = "1.4.0" -nom.workspace = true nonempty.workspace = true tokio-rustls = "0.24.1" rustls-pemfile = "1.0.2" -quick-xml = { version = "0.30.0", features = ["async-tokio"] } -derive_more = "0.99.17" +quick-xml.workspace = true +derive_more.workspace = true uuid = { version = "1.3.0", features = ["v4"] } sqlx = { version = "0.7.0-alpha.2", features = ["sqlite", "migrate"] } proto-irc = { path = "crates/proto-irc" } +proto-xmpp = { path = "crates/proto-xmpp" } mgmt-api = { path = "crates/mgmt-api" } clap.workspace = true diff --git a/crates/proto-xmpp/Cargo.toml b/crates/proto-xmpp/Cargo.toml new file mode 100644 index 0000000..d8b28f9 --- /dev/null +++ b/crates/proto-xmpp/Cargo.toml @@ -0,0 +1,12 @@ +[package] +name = "proto-xmpp" +edition = "2021" +version.workspace = true + +[dependencies] +quick-xml.workspace = true +lazy_static.workspace = true +regex.workspace = true +anyhow.workspace = true +tokio.workspace = true +derive_more.workspace = true diff --git a/src/protos/xmpp/bind.rs b/crates/proto-xmpp/src/bind.rs similarity index 89% rename from src/protos/xmpp/bind.rs rename to crates/proto-xmpp/src/bind.rs index 35d0dfc..e6ef5d9 100644 --- a/src/protos/xmpp/bind.rs +++ b/crates/proto-xmpp/src/bind.rs @@ -1,11 +1,11 @@ use std::fmt::Display; -use nom::AsBytes; +use anyhow::{anyhow, Result}; use quick_xml::events::{BytesEnd, BytesStart, BytesText, Event}; use quick_xml::name::{Namespace, ResolveResult}; use crate::prelude::*; -use crate::util::xml::*; +use crate::xml::*; pub const XMLNS: &'static str = "urn:ietf:params:xml:ns:xmpp-bind"; @@ -49,7 +49,7 @@ impl Jid { } let m = RE .captures(i) - .ok_or(ffail!("Incorrectly format jid: {i}"))?; + .ok_or(anyhow!("Incorrectly format jid: {i}"))?; let name = m.get(2).map(|name| Name(name.as_str().into())); let server = m.get(3).unwrap(); @@ -117,19 +117,19 @@ impl Parser for BindRequestParser { match self.0 { Initial => { let Event::Start(bytes) = event else { - return Continuation::Final(Err(ffail!("Unexpected XML event: {event:?}"))); + return Continuation::Final(Err(anyhow!("Unexpected XML event: {event:?}"))); }; if bytes.name().0 != BindRequest::NAME.as_bytes() { - return Continuation::Final(Err(ffail!( + return Continuation::Final(Err(anyhow!( "Unexpected XML tag: {:?}", bytes.name() ))); } let ResolveResult::Bound(Namespace(ns)) = namespace else { - return Continuation::Final(Err(ffail!("No namespace provided"))); + return Continuation::Final(Err(anyhow!("No namespace provided"))); }; if ns != XMLNS.as_bytes() { - return Continuation::Final(Err(ffail!("Incorrect namespace"))); + return Continuation::Final(Err(anyhow!("Incorrect namespace"))); } Continuation::Continue(BindRequestParser(InBind(None))) } @@ -139,17 +139,17 @@ impl Parser for BindRequestParser { } Event::End(bytes) => { let Some(resource) = resource else { - return Continuation::Final(Err(ffail!("No resource was provided"))); + return Continuation::Final(Err(anyhow!("No resource was provided"))); }; Continuation::Final(Ok(BindRequest(Resource(resource.into())))) } - _ => Continuation::Final(Err(ffail!("Unexpected XML event: {event:?}"))), + _ => Continuation::Final(Err(anyhow!("Unexpected XML event: {event:?}"))), }, InBindResourceInitial => { let Event::Text(text) = event else { - return Continuation::Final(Err(ffail!("Unexpected XML event: {event:?}"))); + return Continuation::Final(Err(anyhow!("Unexpected XML event: {event:?}"))); }; - let resource = match std::str::from_utf8(text.as_bytes()) { + let resource = match std::str::from_utf8(&*text) { Ok(e) => e.to_string(), Err(err) => return Continuation::Final(Err(err.into())), }; @@ -157,7 +157,7 @@ impl Parser for BindRequestParser { } InBindResourceEnd(resource) => { let Event::End(bytes) = event else { - return Continuation::Final(Err(ffail!("Unexpected XML event: {event:?}"))); + return Continuation::Final(Err(anyhow!("Unexpected XML event: {event:?}"))); }; Continuation::Continue(BindRequestParser(InBind(Some(resource)))) } diff --git a/src/protos/xmpp/client.rs b/crates/proto-xmpp/src/client.rs similarity index 99% rename from src/protos/xmpp/client.rs rename to crates/proto-xmpp/src/client.rs index 606e03c..2a6697f 100644 --- a/src/protos/xmpp/client.rs +++ b/crates/proto-xmpp/src/client.rs @@ -3,8 +3,11 @@ use quick_xml::events::attributes::Attribute; use quick_xml::events::{BytesEnd, BytesStart, BytesText, Event}; use quick_xml::name::{QName, ResolveResult}; +use anyhow::{Result, anyhow as ffail}; + + use crate::prelude::*; -use crate::util::xml::*; +use crate::xml::*; use super::bind::Jid; @@ -308,9 +311,9 @@ impl Parser for IqParser { } IqParserInner::Final(state) => { if let Event::End(ref bytes) = event { - let id = fail_fast!(state.id.ok_or_else(|| fail("No id provided"))); - let r#type = fail_fast!(state.r#type.ok_or_else(|| fail("No type provided"))); - let body = fail_fast!(state.body.ok_or_else(|| fail("No body provided"))); + let id = fail_fast!(state.id.ok_or_else(|| ffail!("No id provided"))); + let r#type = fail_fast!(state.r#type.ok_or_else(|| ffail!("No type provided"))); + let body = fail_fast!(state.body.ok_or_else(|| ffail!("No body provided"))); Continuation::Final(Ok(Iq { from: state.from, id, @@ -579,7 +582,7 @@ impl ToXml for Presence { #[cfg(test)] mod tests { - use crate::protos::xmpp::bind::{BindRequest, Name, Resource, Server}; + use crate::bind::{BindRequest, Name, Resource, Server}; use super::*; use quick_xml::NsReader; diff --git a/src/protos/xmpp/disco.rs b/crates/proto-xmpp/src/disco.rs similarity index 99% rename from src/protos/xmpp/disco.rs rename to crates/proto-xmpp/src/disco.rs index a15e610..973242d 100644 --- a/src/protos/xmpp/disco.rs +++ b/crates/proto-xmpp/src/disco.rs @@ -2,8 +2,8 @@ use quick_xml::events::attributes::Attribute; use quick_xml::events::{BytesEnd, BytesStart, Event}; use quick_xml::name::{QName, ResolveResult}; -use crate::prelude::*; -use crate::util::xml::*; +use anyhow::{Result, anyhow as ffail}; +use crate::xml::*; use super::bind::Jid; diff --git a/src/protos/xmpp/mod.rs b/crates/proto-xmpp/src/lib.rs similarity index 78% rename from src/protos/xmpp/mod.rs rename to crates/proto-xmpp/src/lib.rs index 0f99af7..ee85319 100644 --- a/src/protos/xmpp/mod.rs +++ b/crates/proto-xmpp/src/lib.rs @@ -1,3 +1,10 @@ +#![feature( + generators, + generator_trait, + type_alias_impl_trait, + impl_trait_in_assoc_type +)] + pub mod bind; pub mod client; pub mod disco; @@ -8,6 +15,8 @@ pub mod session; pub mod stanzaerror; pub mod stream; pub mod tls; +mod prelude; +pub mod xml; // Implemented as a macro instead of a fn due to borrowck limitations macro_rules! skip_text { @@ -25,4 +34,4 @@ macro_rules! skip_text { }; } -pub(super) use skip_text; +pub(crate) use skip_text; diff --git a/src/protos/xmpp/muc/mod.rs b/crates/proto-xmpp/src/muc/mod.rs similarity index 86% rename from src/protos/xmpp/muc/mod.rs rename to crates/proto-xmpp/src/muc/mod.rs index 8822fe3..250d50d 100644 --- a/src/protos/xmpp/muc/mod.rs +++ b/crates/proto-xmpp/src/muc/mod.rs @@ -1,8 +1,8 @@ use quick_xml::events::Event; use quick_xml::name::ResolveResult; -use crate::prelude::*; -use crate::util::xml::*; +use anyhow::{anyhow, Result}; +use crate::xml::*; pub const XMLNS: &'static str = "http://jabber.org/protocol/muc"; @@ -22,7 +22,7 @@ impl FromXml for History { let (bytes, end) = match event { Event::Start(bytes) => (bytes, false), Event::Empty(bytes) => (bytes, true), - _ => return Err(ffail!("Unexpected XML event: {event:?}")), + _ => return Err(anyhow!("Unexpected XML event: {event:?}")), }; for attr in bytes.attributes() { let attr = attr?; @@ -51,7 +51,7 @@ impl FromXml for History { let (namespace, event) = yield; let Event::End(bytes) = event else { - return Err(ffail!("Unexpected XML event: {event:?}")); + return Err(anyhow!("Unexpected XML event: {event:?}")); }; Ok(history) } @@ -73,15 +73,15 @@ impl FromXml for Password { fn parse() -> Self::P { |(namespace, event): (ResolveResult<'static>, &'static Event<'static>)| -> Result { let Event::Start(bytes) = event else { - return Err(ffail!("Unexpected XML event: {event:?}")); + return Err(anyhow!("Unexpected XML event: {event:?}")); }; let (namespace, event) = yield; let Event::Text(bytes) = event else { - return Err(ffail!("Unexpected XML event: {event:?}")); + return Err(anyhow!("Unexpected XML event: {event:?}")); }; let s = std::str::from_utf8(bytes)?.to_string(); let Event::End(bytes) = event else { - return Err(ffail!("Unexpected XML event: {event:?}")); + return Err(anyhow!("Unexpected XML event: {event:?}")); }; Ok(Password(s)) } @@ -109,7 +109,7 @@ impl FromXml for X { let (bytes, end) = match event { Event::Start(bytes) => (bytes, false), Event::Empty(bytes) => (bytes, true), - _ => return Err(ffail!("Unexpected XML event: {event:?}")), + _ => return Err(anyhow!("Unexpected XML event: {event:?}")), }; if end { return Ok(res); @@ -121,7 +121,7 @@ impl FromXml for X { Event::Start(bytes) => bytes, Event::Empty(bytes) => bytes, Event::End(_) => break, - _ => return Err(ffail!("Unexpected XML event: {event:?}")), + _ => return Err(anyhow!("Unexpected XML event: {event:?}")), }; if bytes.name().0 == Password::NAME.as_bytes() { let password = delegate_parsing!(Password, namespace, event)?; @@ -130,7 +130,7 @@ impl FromXml for X { let history = delegate_parsing!(History, namespace, event)?; res.history = Some(history); } else { - return Err(ffail!("Unexpected XML event: {event:?}")); + return Err(anyhow!("Unexpected XML event: {event:?}")); } } diff --git a/crates/proto-xmpp/src/prelude.rs b/crates/proto-xmpp/src/prelude.rs new file mode 100644 index 0000000..04c4d62 --- /dev/null +++ b/crates/proto-xmpp/src/prelude.rs @@ -0,0 +1,3 @@ +use std::sync::Arc; + +pub type Str = Arc; diff --git a/src/protos/xmpp/roster.rs b/crates/proto-xmpp/src/roster.rs similarity index 96% rename from src/protos/xmpp/roster.rs rename to crates/proto-xmpp/src/roster.rs index 4990bc1..e153843 100644 --- a/src/protos/xmpp/roster.rs +++ b/crates/proto-xmpp/src/roster.rs @@ -1,7 +1,7 @@ use quick_xml::events::{BytesStart, Event}; -use crate::prelude::*; -use crate::util::xml::*; +use crate::xml::*; +use anyhow::{anyhow as ffail, Result}; pub const XMLNS: &'static str = "jabber:iq:roster"; diff --git a/src/protos/xmpp/sasl.rs b/crates/proto-xmpp/src/sasl.rs similarity index 83% rename from src/protos/xmpp/sasl.rs rename to crates/proto-xmpp/src/sasl.rs index e78f605..7068e7a 100644 --- a/src/protos/xmpp/sasl.rs +++ b/crates/proto-xmpp/src/sasl.rs @@ -7,7 +7,7 @@ use quick_xml::{ use tokio::io::{AsyncBufRead, AsyncWrite}; use super::skip_text; -use crate::prelude::*; +use anyhow::{anyhow, Result}; pub enum Mechanism { Plain, @@ -22,7 +22,7 @@ impl Mechanism { pub fn from_str(input: &[u8]) -> Result { match input { b"PLAIN" => Ok(Mechanism::Plain), - _ => Err(fail(format!("unknown auth mechanism: {input:?}").as_str())), + _ => Err(anyhow!("unknown auth mechanism: {input:?}")), } } } @@ -48,20 +48,20 @@ impl Auth { if let Some(mechanism) = mechanism { Mechanism::from_str(mechanism.borrow())? } else { - return Err(fail("expected mechanism attribute in ")); + return Err(anyhow!("expected mechanism attribute in ")); } } else { - return Err(fail("expected start of ")); + return Err(anyhow!("expected start of ")); }; let body = if let Event::Text(text) = reader.read_event_into_async(buf).await? { text.into_inner().into_owned() } else { - return Err(fail("expected text body in ")); + return Err(anyhow!("expected text body in ")); }; if let Event::End(_) = reader.read_event_into_async(buf).await? { //TODO } else { - return Err(fail("expected end of ")); + return Err(anyhow!("expected end of ")); }; Ok(Auth { mechanism, body }) diff --git a/src/protos/xmpp/session.rs b/crates/proto-xmpp/src/session.rs similarity index 86% rename from src/protos/xmpp/session.rs rename to crates/proto-xmpp/src/session.rs index 9f0104b..ba1ab43 100644 --- a/src/protos/xmpp/session.rs +++ b/crates/proto-xmpp/src/session.rs @@ -1,7 +1,7 @@ use quick_xml::events::{BytesStart, Event}; -use crate::prelude::*; -use crate::util::xml::*; +use crate::xml::*; +use anyhow::{anyhow, Result}; pub const XMLNS: &'static str = "urn:ietf:params:xml:ns:xmpp-session"; @@ -29,11 +29,11 @@ impl Parser for SessionParser { Continuation::Continue(SessionParser(SessionParserInner::InSession)) } Event::Empty(_) => Continuation::Final(Ok(Session)), - _ => Continuation::Final(Err(ffail!("Unexpected XML event: {event:?}"))), + _ => Continuation::Final(Err(anyhow!("Unexpected XML event: {event:?}"))), }, SessionParserInner::InSession => match event { Event::End(_) => Continuation::Final(Ok(Session)), - _ => Continuation::Final(Err(ffail!("Unexpected XML event: {event:?}"))), + _ => Continuation::Final(Err(anyhow!("Unexpected XML event: {event:?}"))), }, } } diff --git a/src/protos/xmpp/stanzaerror.rs b/crates/proto-xmpp/src/stanzaerror.rs similarity index 100% rename from src/protos/xmpp/stanzaerror.rs rename to crates/proto-xmpp/src/stanzaerror.rs diff --git a/src/protos/xmpp/stream.rs b/crates/proto-xmpp/src/stream.rs similarity index 98% rename from src/protos/xmpp/stream.rs rename to crates/proto-xmpp/src/stream.rs index 1f133a3..4d11039 100644 --- a/src/protos/xmpp/stream.rs +++ b/crates/proto-xmpp/src/stream.rs @@ -5,8 +5,9 @@ use quick_xml::{NsReader, Writer}; use tokio::io::{AsyncBufRead, AsyncWrite}; use super::skip_text; -use crate::prelude::*; -use crate::util::xml::ToXml; + +use anyhow::{anyhow, Result}; +use crate::xml::ToXml; pub static XMLNS: &'static str = "http://etherx.jabber.org/streams"; pub static PREFIX: &'static str = "stream"; @@ -63,7 +64,6 @@ impl ClientStreamStart { version: version.unwrap(), }) } else { - log::error!("WAT: {incoming:?}"); Err(panic!()) } } diff --git a/src/protos/xmpp/tls.rs b/crates/proto-xmpp/src/tls.rs similarity index 91% rename from src/protos/xmpp/tls.rs rename to crates/proto-xmpp/src/tls.rs index 6fdf4ad..a5a9e0d 100644 --- a/src/protos/xmpp/tls.rs +++ b/crates/proto-xmpp/src/tls.rs @@ -5,7 +5,8 @@ use quick_xml::{NsReader, Writer}; use tokio::io::{AsyncBufRead, AsyncWrite}; use super::skip_text; -use crate::prelude::*; + +use anyhow::{anyhow, Result}; pub static XMLNS: &'static str = "urn:ietf:params:xml:ns:xmpp-tls"; @@ -21,7 +22,7 @@ impl StartTLS { return Ok(StartTLS); } } - Err(ffail!("XML tag starttls expected, received: {incoming:?}")) + Err(anyhow!("XML tag starttls expected, received: {incoming:?}")) } } diff --git a/src/util/xml/ignore.rs b/crates/proto-xmpp/src/xml/ignore.rs similarity index 100% rename from src/util/xml/ignore.rs rename to crates/proto-xmpp/src/xml/ignore.rs diff --git a/src/util/xml.rs b/crates/proto-xmpp/src/xml/mod.rs similarity index 96% rename from src/util/xml.rs rename to crates/proto-xmpp/src/xml/mod.rs index 9ad847e..771bef4 100644 --- a/src/util/xml.rs +++ b/crates/proto-xmpp/src/xml/mod.rs @@ -4,7 +4,7 @@ use std::pin::Pin; use quick_xml::events::Event; use quick_xml::name::ResolveResult; -use crate::prelude::Result; +use anyhow::{anyhow, Result}; mod ignore; pub use ignore::Ignore; @@ -72,6 +72,7 @@ macro_rules! fail_fast { }; } +#[macro_export] macro_rules! delegate_parsing { ($parser: ty, $namespace: expr, $event: expr) => {{ let mut parser = <$parser as FromXml>::parse().consume($namespace, $event); @@ -88,6 +89,7 @@ macro_rules! delegate_parsing { }}; } +#[macro_export] macro_rules! match_parser { ($name: expr, $ns: expr, $event: expr; $subtype: ty, $fin: block) => { if $name.0 == <$subtype as FromXmlTag>::NAME.as_bytes() && $ns == ResolveResult::Bound(Namespace(<$subtype as FromXmlTag>::NS.as_bytes())) { @@ -105,6 +107,6 @@ macro_rules! match_parser { }; } -pub(crate) use delegate_parsing; +pub use delegate_parsing; pub(crate) use fail_fast; -pub(crate) use match_parser; +pub use match_parser; diff --git a/src/main.rs b/src/main.rs index d10c9ee..ddaab27 100644 --- a/src/main.rs +++ b/src/main.rs @@ -8,7 +8,6 @@ mod core; mod prelude; mod projections; -mod protos; mod util; use std::future::Future; diff --git a/src/projections/xmpp/mod.rs b/src/projections/xmpp/mod.rs index fb62e82..db19455 100644 --- a/src/projections/xmpp/mod.rs +++ b/src/projections/xmpp/mod.rs @@ -22,14 +22,13 @@ use tokio_rustls::TlsAcceptor; use crate::core::player::{PlayerConnection, PlayerId, PlayerRegistry}; use crate::core::room::{RoomId, RoomRegistry}; use crate::prelude::*; -use crate::protos::xmpp; -use crate::protos::xmpp::bind::{BindResponse, Jid, Name, Resource, Server}; -use crate::protos::xmpp::client::{Iq, Message, MessageType, Presence}; -use crate::protos::xmpp::disco::*; -use crate::protos::xmpp::roster::RosterQuery; -use crate::protos::xmpp::session::Session; -use crate::protos::xmpp::stream::*; -use crate::util::xml::{Continuation, FromXml, Parser, ToXml}; +use proto_xmpp::bind::{BindResponse, Jid, Name, Resource, Server}; +use proto_xmpp::client::{Iq, Message, MessageType, Presence}; +use proto_xmpp::disco::*; +use proto_xmpp::roster::RosterQuery; +use proto_xmpp::session::Session; +use proto_xmpp::stream::*; +use proto_xmpp::xml::{Continuation, FromXml, Parser, ToXml}; use crate::util::Terminator; use self::proto::{ClientPacket, IqClientBody}; @@ -197,7 +196,7 @@ async fn socket_force_tls( writer: &mut (impl AsyncWrite + Unpin), reader_buf: &mut Vec, ) -> Result<()> { - use crate::protos::xmpp::tls::*; + use proto_xmpp::tls::*; let xml_reader = &mut NsReader::from_reader(reader); let xml_writer = &mut Writer::new(writer); read_xml_header(xml_reader, reader_buf).await?; @@ -254,8 +253,8 @@ async fn socket_auth( .await?; xml_writer.get_mut().flush().await?; - let _ = xmpp::sasl::Auth::parse(xml_reader, reader_buf).await?; - xmpp::sasl::Success.write_xml(xml_writer).await?; + let _ = proto_xmpp::sasl::Auth::parse(xml_reader, reader_buf).await?; + proto_xmpp::sasl::Success.write_xml(xml_writer).await?; let name: Str = "darova".into(); Ok(Authenticated { @@ -346,7 +345,7 @@ async fn socket_final( resource: Some(Resource(author_id.into_inner().into())), }), id: None, - r#type: xmpp::client::MessageType::Groupchat, + r#type: proto_xmpp::client::MessageType::Groupchat, lang: None, subject: None, body: body.into(), @@ -414,7 +413,7 @@ async fn handle_packet( resource: Some(user.xmpp_muc_name.clone()), }), id: m.id, - r#type: xmpp::client::MessageType::Groupchat, + r#type: proto_xmpp::client::MessageType::Groupchat, lang: None, subject: None, body: m.body.clone(), @@ -485,7 +484,7 @@ async fn handle_iq(output: &mut Vec>, iq: Iq, rooms from: None, id: iq.id, to: None, - r#type: xmpp::client::IqType::Result, + r#type: proto_xmpp::client::IqType::Result, body: BindResponse(Jid { name: Some(Name("darova".into())), server: Server("localhost".into()), @@ -499,7 +498,7 @@ async fn handle_iq(output: &mut Vec>, iq: Iq, rooms from: None, id: iq.id, to: None, - r#type: xmpp::client::IqType::Result, + r#type: proto_xmpp::client::IqType::Result, body: Session, }; req.serialize(output); @@ -509,7 +508,7 @@ async fn handle_iq(output: &mut Vec>, iq: Iq, rooms from: None, id: iq.id, to: None, - r#type: xmpp::client::IqType::Result, + r#type: proto_xmpp::client::IqType::Result, body: RosterQuery, }; req.serialize(output); @@ -520,7 +519,7 @@ async fn handle_iq(output: &mut Vec>, iq: Iq, rooms from: iq.to, id: iq.id, to: None, - r#type: xmpp::client::IqType::Result, + r#type: proto_xmpp::client::IqType::Result, body: response, }; req.serialize(output); @@ -531,7 +530,7 @@ async fn handle_iq(output: &mut Vec>, iq: Iq, rooms from: iq.to, id: iq.id, to: None, - r#type: xmpp::client::IqType::Result, + r#type: proto_xmpp::client::IqType::Result, body: response, }; req.serialize(output); @@ -541,7 +540,7 @@ async fn handle_iq(output: &mut Vec>, iq: Iq, rooms from: None, id: iq.id, to: None, - r#type: xmpp::client::IqType::Error, + r#type: proto_xmpp::client::IqType::Error, body: (), }; req.serialize(output); diff --git a/src/projections/xmpp/proto.rs b/src/projections/xmpp/proto.rs index 4667dd1..5fd54d1 100644 --- a/src/projections/xmpp/proto.rs +++ b/src/projections/xmpp/proto.rs @@ -2,12 +2,12 @@ use derive_more::From; use quick_xml::events::Event; use quick_xml::name::{Namespace, ResolveResult}; -use crate::protos::xmpp::bind::BindRequest; -use crate::protos::xmpp::client::{Iq, Message, Presence}; -use crate::protos::xmpp::disco::{InfoQuery, ItemQuery}; -use crate::protos::xmpp::roster::RosterQuery; -use crate::protos::xmpp::session::Session; -use crate::util::xml::*; +use proto_xmpp::bind::BindRequest; +use proto_xmpp::client::{Iq, Message, Presence}; +use proto_xmpp::disco::{InfoQuery, ItemQuery}; +use proto_xmpp::roster::RosterQuery; +use proto_xmpp::session::Session; +use proto_xmpp::xml::*; use crate::prelude::*; diff --git a/src/protos/mod.rs b/src/protos/mod.rs deleted file mode 100644 index c8c39c3..0000000 --- a/src/protos/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -//! Definitions of wire protocols to be used in implementations of projections. -pub mod xmpp; diff --git a/src/util/mod.rs b/src/util/mod.rs index 2fde69e..fb2f952 100644 --- a/src/util/mod.rs +++ b/src/util/mod.rs @@ -4,7 +4,6 @@ pub mod table; pub mod telemetry; #[cfg(test)] pub mod testkit; -pub mod xml; pub struct Terminator { signal: Promise<()>,