pub trait CloneToOwned { type Target; fn clone_to_owned(&self) -> Self::Target; } impl CloneToOwned for Option where T: CloneToOwned, { type Target = Option<::Target>; fn clone_to_owned(&self) -> Self::Target { self.as_ref().map(|i| i.clone_to_owned()) } } impl CloneToOwned for Vec where T: CloneToOwned, { type Target = Vec<::Target>; fn clone_to_owned(&self) -> Self::Target { self.iter().map(|i| i.clone_to_owned()).collect() } }