use std::{marker::PhantomData, sync::Arc};
use tokio::io::AsyncWrite;
use crate::rpc::redraw::{RedrawDecodeResult, RedrawNotification};
pub trait Handler: Send + Sync + Clone + 'static {
type Writer: AsyncWrite + Send + Unpin + 'static;
fn handle_redraw(&self, _redraw: RedrawNotification<'_>) -> RedrawDecodeResult<()> {
Ok(())
}
fn handle_unknown_notify(_name: &str) {}
fn handle_unknown_request(_msgid: u64, _name: &str) {}
}
#[derive(Default)]
pub struct Dummy<Q>
where
Q: AsyncWrite + Send + Sync + Unpin + 'static,
{
q: Arc<PhantomData<Q>>,
}
impl<Q> Clone for Dummy<Q>
where
Q: AsyncWrite + Send + Sync + Unpin + 'static,
{
fn clone(&self) -> Self {
Dummy { q: self.q.clone() }
}
}
impl<Q> Handler for Dummy<Q>
where
Q: AsyncWrite + Send + Sync + Unpin + 'static,
{
type Writer = Q;
}
impl<Q> Dummy<Q>
where
Q: AsyncWrite + Send + Sync + Unpin + 'static,
{
#[must_use]
pub fn new() -> Dummy<Q> {
Dummy {
q: Arc::new(PhantomData),
}
}
}