ezsp 12.0.1

Ember ZNet Serial Protocol
Documentation
use tokio::sync::mpsc::Receiver;

use crate::Callback;
use crate::ember::Status;
use crate::frame::parameters::networking::handler::Handler as Networking;

pub trait AwaitEvent {
    fn await_network_status(&mut self, status: Status) -> impl Future<Output = ()> + Send;

    fn await_network_up(&mut self) -> impl Future<Output = ()> + Send {
        self.await_network_status(Status::NetworkUp)
    }

    fn await_network_down(&mut self) -> impl Future<Output = ()> + Send {
        self.await_network_status(Status::NetworkDown)
    }
}

impl AwaitEvent for Receiver<Callback> {
    async fn await_network_status(&mut self, status: Status) {
        while let Some(callback) = self.recv().await {
            if let Callback::Networking(Networking::StackStatus(stack_status)) = callback
                && stack_status.result() == Ok(status)
            {
                return;
            }
        }
    }
}