use crate::channel::SignalReceiver;
use crate::interface::DartSignalPack;
use serde::{Deserialize, Serialize};
use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet};
pub trait RustSignal: Serialize {
fn send_signal_to_dart(&self);
}
pub trait RustSignalBinary: Serialize {
fn send_signal_to_dart(&self, binary: Vec<u8>);
}
pub trait DartSignal: for<'a> Deserialize<'a> {
fn get_dart_signal_receiver() -> SignalReceiver<DartSignalPack<Self>>;
}
pub trait DartSignalBinary: for<'a> Deserialize<'a> {
fn get_dart_signal_receiver() -> SignalReceiver<DartSignalPack<Self>>;
}
pub trait SignalPiece {
#[doc(hidden)]
fn be_signal_piece(&self) {}
}
impl SignalPiece for i8 {}
impl SignalPiece for i16 {}
impl SignalPiece for i32 {}
impl SignalPiece for i64 {}
impl SignalPiece for i128 {}
impl SignalPiece for u8 {}
impl SignalPiece for u16 {}
impl SignalPiece for u32 {}
impl SignalPiece for u64 {}
impl SignalPiece for u128 {}
impl SignalPiece for f32 {}
impl SignalPiece for f64 {}
impl SignalPiece for bool {}
impl SignalPiece for char {}
impl SignalPiece for String {}
impl SignalPiece for &str {}
impl<T> SignalPiece for Box<T> where T: SignalPiece {}
impl<T> SignalPiece for Option<T> where T: SignalPiece {}
impl<T, const N: usize> SignalPiece for [T; N] where T: SignalPiece {}
impl<T> SignalPiece for Vec<T> where T: SignalPiece {}
impl<T> SignalPiece for HashSet<T> where T: SignalPiece {}
impl<T> SignalPiece for BTreeSet<T> where T: SignalPiece {}
impl<K, V> SignalPiece for HashMap<K, V>
where
K: SignalPiece,
V: SignalPiece,
{
}
impl<K, V> SignalPiece for BTreeMap<K, V>
where
K: SignalPiece,
V: SignalPiece,
{
}
impl SignalPiece for () {}
impl<T1> SignalPiece for (T1,) where T1: SignalPiece {}
impl<T1, T2> SignalPiece for (T1, T2)
where
T1: SignalPiece,
T2: SignalPiece,
{
}
impl<T1, T2, T3> SignalPiece for (T1, T2, T3)
where
T1: SignalPiece,
T2: SignalPiece,
T3: SignalPiece,
{
}
impl<T1, T2, T3, T4> SignalPiece for (T1, T2, T3, T4)
where
T1: SignalPiece,
T2: SignalPiece,
T3: SignalPiece,
T4: SignalPiece,
{
}