Обобщение кода через типажи

Есть такой код:

Ясное дело, хочется его обобщить, чтобы обе ветки обрабатывались одинаково. Для этого делаю типаж:

Он сейчас не полон - например, нужен будет ещё Display в ограничениях, но суть ясна.

Уже на данном этапе вылезает проблема того, что у него есть два типа-параметра, которые для двух ветвей моего кода будут разными - Elf32_Half и Elf32_Off в одном случае, и Elf64_Half и Elf64_Off в другом. Это - псевдонимы для u16 и u32 / u16 и u64 соответственно.

Получается, в объявлении let ehdr: <Box<Elf_Ehdr_T<Elf32_Half, Elf32_Off>> = ... всё равно торчат нижележащие типы. И получается, что я не смогу через один объект ehdr работать с Ehdr обеих битностей.

Как быть?

Про ассоциированные типы уже сказали в гиттере. Ещё тайп алиасы могут помочь скрыть некоторые параметры.

type alias на что? У меня типы-параметры у типажа, а не типа.

Ассоциированные типы точно так же торчат в месте объявления: смотри последний пример здесь

Я три раза перечитал, и никак не могу до конца понять, что собственно нужно. Можешь привести код в том виде, как ты его хочешь получить?

Я хочу, чтобы было вот так

    if options.is_present("file-header") {
        let ehdr:
            Box<Elf_Ehdr_T> =
            read_ehdr(&mut f, elf_class);
        let ehdr = ehdr.to_host_copy(&ehdr.get_endianness());

        print!("{}", ehdr);
    }

Тут ни один внутренний тип Elf32_Ehdr или Elf64_Ehdr не виден в месте объявления, И ehdr на обе битности один