mirror of
https://gitlab.com/xmpp-rs/xmpp-rs.git
synced 2024-07-12 22:21:53 +00:00
tokio-xmpp: use rxml PR feature/push-buf
This commit is contained in:
parent
67c242674e
commit
99a6e6d9f1
3 changed files with 5 additions and 9 deletions
|
@ -22,4 +22,4 @@ gitlab = { repository = "xmpp-rs/xmpp-rs" }
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
quick-xml = "0.22.0"
|
quick-xml = "0.22.0"
|
||||||
rxml = { git = "https://github.com/horazont/rxml.git" }
|
rxml = { git = "https://github.com/horazont/rxml.git", branch = "feature/push-buf" }
|
||||||
|
|
|
@ -27,7 +27,7 @@ trust-dns-proto = "0.20"
|
||||||
trust-dns-resolver = "0.20"
|
trust-dns-resolver = "0.20"
|
||||||
xmpp-parsers = "0.19"
|
xmpp-parsers = "0.19"
|
||||||
minidom = "0.14"
|
minidom = "0.14"
|
||||||
rxml = { git = "https://github.com/horazont/rxml.git" }
|
rxml = { git = "https://github.com/horazont/rxml.git", branch = "feature/push-buf" }
|
||||||
webpki-roots = { version = "0.22", optional = true }
|
webpki-roots = { version = "0.22", optional = true }
|
||||||
|
|
||||||
[build-dependencies]
|
[build-dependencies]
|
||||||
|
|
|
@ -10,7 +10,7 @@ use std::io;
|
||||||
use tokio_util::codec::{Decoder, Encoder};
|
use tokio_util::codec::{Decoder, Encoder};
|
||||||
use xmpp_parsers::Element;
|
use xmpp_parsers::Element;
|
||||||
use minidom::tree_builder::TreeBuilder;
|
use minidom::tree_builder::TreeBuilder;
|
||||||
use rxml::{EventRead, Lexer, PushDriver, RawParser};
|
use rxml::{Lexer, PushDriver, RawParser};
|
||||||
use crate::Error;
|
use crate::Error;
|
||||||
|
|
||||||
/// Anything that can be sent or received on an XMPP/XML stream
|
/// Anything that can be sent or received on an XMPP/XML stream
|
||||||
|
@ -31,7 +31,7 @@ pub struct XMPPCodec {
|
||||||
/// Outgoing
|
/// Outgoing
|
||||||
ns: Option<String>,
|
ns: Option<String>,
|
||||||
/// Incoming
|
/// Incoming
|
||||||
driver: PushDriver<'static, RawParser>,
|
driver: PushDriver<RawParser>,
|
||||||
stanza_builder: TreeBuilder,
|
stanza_builder: TreeBuilder,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,11 +59,7 @@ impl Decoder for XMPPCodec {
|
||||||
type Error = Error;
|
type Error = Error;
|
||||||
|
|
||||||
fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
|
fn decode(&mut self, buf: &mut BytesMut) -> Result<Option<Self::Item>, Self::Error> {
|
||||||
// TODO: avoid the .to_owned
|
while let Some(token) = self.driver.parse(buf, false).map_err(|e| minidom::Error::from(e))? {
|
||||||
self.driver.feed(std::borrow::Cow::from(buf.as_ref().to_owned()));
|
|
||||||
buf.clear();
|
|
||||||
|
|
||||||
while let Some(token) = self.driver.read().map_err(|e| minidom::Error::from(e))? {
|
|
||||||
let had_stream_root = self.stanza_builder.depth() > 0;
|
let had_stream_root = self.stanza_builder.depth() > 0;
|
||||||
self.stanza_builder.process_event(token)?;
|
self.stanza_builder.process_event(token)?;
|
||||||
let has_stream_root = self.stanza_builder.depth() > 0;
|
let has_stream_root = self.stanza_builder.depth() > 0;
|
||||||
|
|
Loading…
Reference in a new issue