type Foo struct {
    header Header
}

type Header interface {}

type AudioHeader interface {
    Header
    Audio() error
}

type VideoHeader interface {
    Header
    Video() error
}

func bar() error {
    ...
    // 假设有了一个 Header 类型的 header
    ah := header.(AudioHeader)
    ah.Audio()

    vh := header.(VideoHeader)
    vh.Video()
    ...
}

大体上的意思是, 我想用一个 header 去存储多种 Header trait, 我能想到最接近的是使用 enum.

enum Header {
    AudioHeader,
    VideoHeader,
}

trait Audio {}
trait Video {}

impl Audio for Header::AudioHeader {} // 报错, 因为 Header::AudioHeader 不是 type

Rust 的trait 确实也可以继承, 比如

trait A {}

trait B: A {}

trait C: A {}

但是我印象里没有能用 trait A 断言到 trait B 或 triat C 的说法.

特此请教一下, Rust 处理这种类型断言的情况有什么好的办法吗?