I have a use-case which might call for using both the _ and the else prongs in a switch. This currently is a compiler error. Do you think this should be allowed?
In my use case, I am deserailizing a byte stream. I don’t trust the byte stream so my Enum must be able to handle all possible values. I also want to make sure I get the right value of the enum.
/// Mailbox Types
///
/// Ref: IEC 61158-4-12:2019 5.6
pub const MailboxType = enum(u4) {
/// error
ERR = 0x00,
/// ADS over EtherCAT (AoE)
AoE,
/// Ethernet over EtherCAT (EoE)
EoE,
/// CAN Application Protocol over EtherCAT (CoE)
CoE,
/// File Access over EtherCAT (FoE)
FoE,
/// Servo Drive Profile over EtherCAT (SoE)
SoE,
/// Vendor Specfic over EtherCAT (VoE)
VoE = 0x0f,
_,
};
pub const InContent = union(enum) {
coe: coe.InContent,
// TODO: implement other protocols
/// identifiy the content of the mailbox in buffer
fn identify(buf: []const u8) !std.meta.Tag(InContent) {
var fbs = std.io.fixedBufferStream(buf);
const reader = fbs.reader();
const mbx_header = try wire.packFromECatReader(Header, reader);
return switch (mbx_header.type) {
.CoE => return .coe,
_ => return error.InvalidMbxProtocol,
else => return error.NotImplemented,
};
}
};