use super::traits::StanzaHandler;
use crate::client::Client;
use async_trait::async_trait;
use log::{debug, warn};
use std::sync::Arc;
use wacore_ng::xml::DisplayableNode;
use wacore_binary_ng::node::Node;
#[derive(Default)]
pub struct IqHandler;
#[async_trait]
impl StanzaHandler for IqHandler {
fn tag(&self) -> &'static str {
"iq"
}
async fn handle(&self, client: Arc<Client>, node: Arc<Node>, _cancelled: &mut bool) -> bool {
if !client.handle_iq(&node).await {
if node.attrs.get("type").and_then(|s| s.as_str()) == Some("result") {
debug!(
"Received late IQ response (waiter already removed): {}",
DisplayableNode(&node)
);
} else {
warn!("Received unhandled IQ: {}", DisplayableNode(&node));
}
}
true
}
}