Why this fires¶
Two variants of the same numeric-discriminant enum resolved to the same integer value — either two explicit = n values collide, or an auto-incremented value happens to land on one already used by an explicit discriminant.
enum Packet: u8 {
Connect = 0,
Data = 0,
// ^ error[TE116]: duplicate discriminant 0 on `Packet::Data`
// (already used by `Connect`)
}Fix it¶
Give each variant a distinct value:
enum Packet: u8 {
Connect = 0,
Data = 1, // ok
}Watch out for auto-increment colliding with a later explicit value — a variant with no = n takes "previous value + 1":
enum Packet: u8 {
Connect, // 0
Data, // 1
Ping = 1,
// ^ error[TE116]: duplicate discriminant 1 on `Packet::Ping` (already used by `Data`)
}See also¶
TE115— discriminant value doesn't fit the backing type.TE118— discriminant must be an integer constant.- /docs/data-structures#enums — numeric enum discriminants and auto-increment.