#[derive(Debug)]
pub struct Error;
pub trait Reset {
fn reset(&mut self) -> Result<(), Error>;
}
pub trait MaybeReset {
fn maybe_reset(&mut self);
}
impl<T: Reset> MaybeReset for T {
fn maybe_reset(&mut self) {
let _ = self.reset(); }
}
impl MaybeReset for String {
fn maybe_reset(&mut self) {
}
}
pub fn reset<T: MaybeReset>(v: &mut T) {
v.maybe_reset();
}
struct MyStruct;
impl Reset for MyStruct {
fn reset(&mut self) -> Result<(), Error> {
println!("MyStruct has been reset!");
Ok(())
}
}
fn main() {
let mut a = MyStruct;
reset(&mut a);
let mut b = String::from("Hello, world!");
reset(&mut b); }