pub trait Split { type R; type W; fn split(self) -> (Self::R, Self::W); }
split something into two parts
read half type
write half type
consume and return parts