summaryrefslogtreecommitdiffstats
path: root/src/stanza
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/stanza/mod.rs1
-rw-r--r--src/stanza/sasl.rs32
-rw-r--r--src/stanza/stream.rs7
3 files changed, 39 insertions, 1 deletions
diff --git a/src/stanza/mod.rs b/src/stanza/mod.rs
index baf29e0..4eaa4c2 100644
--- a/src/stanza/mod.rs
+++ b/src/stanza/mod.rs
@@ -1 +1,2 @@
+pub mod sasl;
pub mod stream;
diff --git a/src/stanza/sasl.rs b/src/stanza/sasl.rs
new file mode 100644
index 0000000..c0e41ab
--- /dev/null
+++ b/src/stanza/sasl.rs
@@ -0,0 +1,32 @@
+use serde::{Deserialize, Serialize};
+
+#[derive(Deserialize, PartialEq, Debug)]
+pub struct Mechanisms {
+ #[serde(rename = "$value")]
+ pub mechanisms: Vec<Mechanism>,
+}
+
+#[derive(Deserialize, PartialEq, Debug)]
+pub struct Mechanism {
+ #[serde(rename = "$text")]
+ pub mechanism: String,
+}
+
+#[derive(Serialize, Debug)]
+#[serde(rename = "auth")]
+pub struct Auth {
+ #[serde(rename = "@xmlns")]
+ pub ns: String,
+ #[serde(rename = "@mechanism")]
+ pub mechanism: String,
+ #[serde(rename = "$text")]
+ pub sasl_data: Option<String>,
+}
+
+#[derive(Deserialize, Debug)]
+pub struct Challenge {
+ #[serde(rename = "@xmlns")]
+ pub ns: String,
+ #[serde(rename = "$text")]
+ pub sasl_data: String,
+}
diff --git a/src/stanza/stream.rs b/src/stanza/stream.rs
index dde741d..4c0addd 100644
--- a/src/stanza/stream.rs
+++ b/src/stanza/stream.rs
@@ -1,5 +1,7 @@
use serde::{Deserialize, Serialize};
+use super::sasl::Mechanisms;
+
#[derive(Serialize, Deserialize)]
#[serde(rename = "stream:stream")]
struct Stream {
@@ -31,6 +33,9 @@ pub enum StreamFeature {
#[serde(rename = "starttls")]
StartTls,
// TODO: other stream features
- Sasl,
+ #[serde(rename = "mechanisms")]
+ Sasl(Mechanisms),
Bind,
+ #[serde(other)]
+ Unknown,
}