Skip to content

Hierarchical enums using arbitrary enum discriminants #81

Closed
@hecatia-elegua

Description

@hecatia-elegua

Relevant issue: rust-lang/rust#60553

I am currently working on a PCI driver with many predefined values for classes and their subclasses:

enum ClassCode {
    Old(Old) = 0x0,
    MassStorage(MassStorageController) = 0x1,
    Network(NetworkController) = 0x2,
//...
enum MassStorageController {
    SCSI(SCSIController) = 0x0,
    IDE(IDEController) = 0x1,
    FloppyDiskController = 0x2,
//...
enum SCSIController {
    VendorSpecific = 0x00,
    StorageDevice = 0x11,
//...

As you can see, these form a kind of hierarchy.
Now I would want to parse the raw values from pci into an enum-value of type ClassCode.

This would allow for a very nice API:

for device in pci::pci_device_iter() {
    match device.class {
        ClassCode::MassStorage(MassStorageController::SCSI(_)) => //...
        ClassCode::Network(_)  => //...
    }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions