use namada_sdk::eth_bridge::oracle::config::Config;
use tokio::sync::mpsc;
use tokio::sync::mpsc::error::TrySendError;
pub type Receiver = mpsc::Receiver<Command>;
#[derive(Debug)]
pub struct Sender {
last_command: Option<Command>,
inner_sender: mpsc::Sender<Command>,
}
impl Sender {
pub fn try_send(
&mut self,
cmd: Command,
) -> Result<(), TrySendError<Command>> {
if self.last_command.as_ref() != Some(&cmd) {
self.last_command = Some(cmd.clone());
self.inner_sender.try_send(cmd)
} else {
Ok(())
}
}
}
pub fn channel() -> (Sender, Receiver) {
let (inner_sender, receiver) = mpsc::channel(5);
let sender = Sender {
last_command: None,
inner_sender,
};
(sender, receiver)
}
#[derive(Clone, Debug, Eq, PartialEq, Hash, Ord, PartialOrd)]
pub enum Command {
UpdateConfig(Config),
}