pub trait Commander { type Cmd; fn send_cmd(&mut self, cmd: &Self::Cmd); } use std::sync::{Arc, RwLock}; use crate::{ type_system::ReprTree }; //use r3vi::view::singleton::*; pub trait ObjCommander { fn send_cmd_obj(&mut self, cmd_obj: Arc>); } //impl> ObjCommander for T { impl ObjCommander for C where C::Cmd: 'static { fn send_cmd_obj(&mut self, cmd_obj: Arc>) { /* self.send_cmd( &cmd_obj.read().unwrap() .get_port::>().unwrap() .get_view().unwrap() .get() ); */ } } impl Commander for r3vi::buffer::vec::VecBuffer { type Cmd = r3vi::buffer::vec::VecDiff; fn send_cmd(&mut self, cmd: &Self::Cmd) { self.apply_diff(cmd.clone()); } }