I’ve been looking at Rust recently and I wrote a small Rust program that uses traits, a concept very similar to interfaces in other languages. There’s a lot to learn but this seems reasonable.
struct Message {    id: i32,    text: String,}
trait Printer {    fn print(&self, value: &str);}
struct ConsolePrinter {}
impl Printer for ConsolePrinter {    fn print(&self, value: &str) {        println!("{}", value);    }}
fn main() {    let messages = vec![        Message {            id: 1,            text: String::from("Hello world"),        },        Message {            id: 2,            text: String::from("How are you?"),        },        Message {            id: 3,            text: String::from("Goodbye"),        },    ];
    let printer = ConsolePrinter {};
    for message in &messages {        printer.print(&message.text)    }}