Smithay / udev-rs

Libudev bindings for Rust
MIT License
42 stars 28 forks source link

Optional serde build feature #45

Open fpagliughi opened 6 months ago

fpagliughi commented 6 months ago

It would be nice to have an optional cargo build feature to allow Device information and Event data to be easily serialized using serde.

If you're interested, I could do the work and put up a PR.

For example, an event for a USB device insertion, serialized to JSON, might look like this:

{
  "type": "add",
  "seqNum": 24130,
  "subsystem": "usb",
  "sysname": "1-1",
  "devtype": "usb_device",
  "device": {
    "devnum": 48414,
    "syspath": "/sys/devices/pci0000:00/0000:00:14.0/usb1/1-1",
    "devpath": "/devices/pci0000:00/0000:00:14.0/usb1/1-1",
    "devnode": "/dev/bus/usb/001/031",
    "subsystem": "usb",
    "sysname": "1-1",
    "sysnum": 1,
    "devtype": "usb_device",
    "driver": "usb",
    "attributes": {
      "authorized": "1",
      "avoid_reset_quirk": "0",
      "bConfigurationValue": "1",
      "bDeviceClass": "00",
      "bDeviceProtocol": "00",
      "bDeviceSubClass": "00",
      "bMaxPacketSize0": "8",
      "bMaxPower": "100mA",
      "bNumConfigurations": "1",
      "bNumInterfaces": " 1",
      "bcdDevice": "0600",
      "bmAttributes": "a0",
      "busnum": "1",
      "configuration": "",
      "descriptors": "\u0012\u0001",
      "dev": "189:30",
      "devnum": "31",
      "devpath": "1",
      "driver": "usb",
      "firmware_node": "",
      "idProduct": "6001",
      "idVendor": "0403",
      "ltm_capable": "no",
      "manufacturer": "FTDI",
      "maxchild": "0",
      "port": "",
      "product": "US232R",
      "quirks": "0x0",
      "removable": "removable",
      "rx_lanes": "1",
      "serial": "FTDBHX3J",
      "speed": "12",
      "subsystem": "usb",
      "tx_lanes": "1",
      "uevent": "MAJOR=189,MINOR=30,DEVNAME=bus/usb/001/031,DEVTYPE=usb_device,DRIVER=usb,PRODUCT=403/6001/600,TYPE=0/0/0,BUSNUM=001,DEVNUM=031",
      "urbnum": "18",
      "version": " 2.00"
    },
    "properties": {
      "ACTION": "add",
      "BUSNUM": "001",
      "DEVNAME": "/dev/bus/usb/001/031",
      "DEVNUM": "031",
      "DEVPATH": "/devices/pci0000:00/0000:00:14.0/usb1/1-1",
      "DEVTYPE": "usb_device",
      "DRIVER": "usb",
      "ID_BUS": "usb",
      "ID_FOR_SEAT": "usb-pci-0000_00_14_0-usb-0_1",
      "ID_MODEL": "US232R",
      "ID_MODEL_ENC": "US232R",
      "ID_MODEL_FROM_DATABASE": "FT232 Serial (UART) IC",
      "ID_MODEL_ID": "6001",
      "ID_PATH": "pci-0000:00:14.0-usb-0:1",
      "ID_PATH_TAG": "pci-0000_00_14_0-usb-0_1",
      "ID_REVISION": "0600",
      "ID_SERIAL": "FTDI_US232R_FTDBHX3J",
      "ID_SERIAL_SHORT": "FTDBHX3J",
      "ID_USB_INTERFACES": ":ffffff:",
      "ID_VENDOR": "FTDI",
      "ID_VENDOR_ENC": "FTDI",
      "ID_VENDOR_FROM_DATABASE": "Future Technology Devices International, Ltd",
      "ID_VENDOR_ID": "0403",
      "MAJOR": "189",
      "MINOR": "30",
      "PRODUCT": "403/6001/600",
      "SEQNUM": "24130",
      "SUBSYSTEM": "usb",
      "TAGS": ":seat:uaccess:",
      "TYPE": "0/0/0",
      "USEC_INITIALIZED": "257380779616"
    }
  }
}
Drakulix commented 6 months ago

Granted we can provide a stable serialization here (with regards to different udev-implementations and versions), this looks like a good idea to me!