Как получить поле из обобщения Rust?

Существует ли какой-то макрос для получения полей из обобщённых типов? Что я имею в виду: мне нужен макрос, который способен проверять существование поля, а затем отдавать значения этого поля.

Что-то типа этого:

struct Bar {
    num: u8
}

fn foo<T>(bar: T) -> u8 {
    let a: u8 = get_field!(bar, num);

    a
}


fn main() {
    let bar = Bar { num: 255 };

    assert_eq!(foo(bar), 255)
}

Можно сделать и через трейты, но...


Ответы (1 шт):

Автор решения: mzabaluev

Макросы преобразуют только синтаксис, в результате подстановки должен получиться осмысленный Rust. Из обобщенного параметра в вашем примере нет способа получить значение поля какой-либо конкретной структуры, которая может быть в него подставлена.

→ Ссылка