use std::sync::Arc;
mod input;
pub(crate) use input::{Input, InputObject};
mod output;
pub(crate) use output::{Output, OutputObject};
mod data;
pub use data::Data;
pub(crate) type Assoc<U> = <U as UniqueIdentifier>::DataType;
pub trait UniqueIdentifier: Send + Sync {
type DataType;
}
pub(crate) type S<U> = Arc<Data<U>>;
pub trait Update {
fn update(&mut self) {}
}
pub trait Read<U: UniqueIdentifier> {
fn read(&mut self, data: Arc<Data<U>>);
}
pub trait Write<U: UniqueIdentifier> {
fn write(&mut self) -> Option<Arc<Data<U>>>;
}
pub trait Size<U: UniqueIdentifier> {
fn len(&self) -> usize;
}
#[cfg(test)]
mod tests {
use crate as uid;
use uid_derive::UID;
#[derive(UID)]
#[uid(data = "u8")]
pub enum A {}
#[test]
fn impl_uid() {
enum U {}
impl uid::UniqueIdentifier for U {
type DataType = f64;
}
let _: <U as uid::UniqueIdentifier>::DataType = 1f64;
}
#[test]
fn derive() {
#[derive(UID)]
enum U {}
let _: <U as uid::UniqueIdentifier>::DataType = vec![1f64];
}
#[test]
fn derive_uid() {
#[derive(UID)]
#[uid(data = "Vec<f32>")]
enum U {}
let _: <U as uid::UniqueIdentifier>::DataType = vec![1f32];
}
}