trait Named {
    fn say_name(&self) -> String;
}

trait Bold {
    fn write_bold(&self);
}

impl<T: Named> Bold for T {
    fn write_bold(&self) {
        println!("!bold {}", self.say_name())
    }
}

struct Person {
    name: String,
}

impl Named for Person {
    fn say_name(&self) -> String {
        self.name.clone()
    }
}

fn main() {
    let p = Person{name: String::from("Jasper")};

    p.write_bold();
}
