dos-uid-derive 5.0.0

dos-actors UniqueIdentifier derive macro
Documentation
use std::marker::PhantomData;

use dos_uid_derive::UID;
use interface::{Data, Read, Size, Update, Write};

struct Q<T>(PhantomData<T>);

enum ID {}

#[derive(UID)]
#[uid(data = Q<ID>, port = 9999)]
enum TU {}

struct Client {}

impl Update for Client {}
impl Write<TU> for Client {
    fn write(&mut self) -> Option<Data<TU>> {
        None
    }
}
impl Read<TU> for Client {
    fn read(&mut self, _data: Data<TU>) {}
}
impl Size<TU> for Client {
    fn len(&self) -> usize {
        1234
    }
}

#[derive(UID)]
#[alias(name = TU, client = Client, traits = Write, Read, Size)]
enum TUT {}

fn main() {
    let mut client = Client {};
    <Client as Write<TU>>::write(&mut client);
    <Client as Write<TUT>>::write(&mut client);
    let q = Q::<ID>(PhantomData);
    <Client as Read<TU>>::read(&mut client, Data::<TU>::new(q));
    let qq = Q::<ID>(PhantomData);
    <Client as Read<TUT>>::read(&mut client, Data::<TUT>::new(qq));
    println!("TUT size: {}", <Client as Size<TUT>>::len(&client))
}