From 4886396044356d2676a77c3900af796fe7641f42 Mon Sep 17 00:00:00 2001 From: cel 🌸 Date: Wed, 4 Dec 2024 02:09:07 +0000 Subject: implement client --- src/stanza/client/mod.rs | 27 ++++++++++++++++++++------- 1 file changed, 20 insertions(+), 7 deletions(-) (limited to 'src/stanza/client/mod.rs') diff --git a/src/stanza/client/mod.rs b/src/stanza/client/mod.rs index 25d7b56..2b063d6 100644 --- a/src/stanza/client/mod.rs +++ b/src/stanza/client/mod.rs @@ -1,7 +1,7 @@ use iq::Iq; use message::Message; use peanuts::{ - element::{FromElement, IntoElement}, + element::{Content, ContentBuilder, FromContent, FromElement, IntoContent, IntoElement}, DeserializeError, }; use presence::Presence; @@ -20,6 +20,18 @@ pub enum Stanza { Presence(Presence), Iq(Iq), Error(StreamError), + OtherContent(Content), +} + +impl FromContent for Stanza { + fn from_content(content: Content) -> peanuts::element::DeserializeResult { + match content { + Content::Element(element) => Ok(Stanza::from_element(element)?), + Content::Text(_) => Ok(Stanza::OtherContent(content)), + Content::PI => Ok(Stanza::OtherContent(content)), + Content::Comment(_) => Ok(Stanza::OtherContent(content)), + } + } } impl FromElement for Stanza { @@ -36,13 +48,14 @@ impl FromElement for Stanza { } } -impl IntoElement for Stanza { - fn builder(&self) -> peanuts::element::ElementBuilder { +impl IntoContent for Stanza { + fn builder(&self) -> peanuts::element::ContentBuilder { match self { - Stanza::Message(message) => message.builder(), - Stanza::Presence(presence) => presence.builder(), - Stanza::Iq(iq) => iq.builder(), - Stanza::Error(error) => error.builder(), + Stanza::Message(message) => ::builder(message), + Stanza::Presence(presence) => ::builder(presence), + Stanza::Iq(iq) => ::builder(iq), + Stanza::Error(error) => ::builder(error), + Stanza::OtherContent(_content) => ContentBuilder::Comment("other-content".to_string()), } } } -- cgit