新版本的变更 / Rust 1.75

// *** before: ***
// трейт с асинхронным методом требовал стороннего макроса,
// а каждый вызов - короба с фьючерсом внутри
#[async_trait]
trait Storage {
    async fn load(&self, id: u32) -> String;
}

// *** in version 1.75: ***
trait Storage {
    async fn load(&self, id: u32) -> String;
}

struct Memory;

impl Storage for Memory {
    async fn load(&self, id: u32) -> String {
        format!("запись {id}")
    }
}