sig
  type error = Null | Errno of int
  val string_of_error : Udev.error -> string
  exception Error of Udev.error
  module Context : sig type t val create : unit -> Udev.Context.t end
  module Device :
    sig
      type t
      type descr =
          Syspath of string
        | Subsystem_sysname of string * string
        | Device_id of string
        | Environment
      val create : Udev.Context.t -> Udev.Device.descr -> Udev.Device.t
      val context : Udev.Device.t -> Udev.Context.t
      val syspath : Udev.Device.t -> string
      val sysname : Udev.Device.t -> string
      val sysnum : Udev.Device.t -> string option
      val devpath : Udev.Device.t -> string
      val tags : Udev.Device.t -> string list
      val has_tag : Udev.Device.t -> string -> bool
      val subsystem : Udev.Device.t -> string
      val driver : Udev.Device.t -> string option
      val devtype : Udev.Device.t -> string option
      val devnode : Udev.Device.t -> string option
      val devlinks : Udev.Device.t -> string list
      val is_initialized : Udev.Device.t -> bool
      val usec_since_initialized : Udev.Device.t -> Stdint.Uint64.t
      val parent : Udev.Device.t -> Udev.Device.t option
      val find_parent :
        Udev.Device.t ->
        ?devtype:string -> subsystem:string -> Udev.Device.t option
      type action =
          Add
        | Remove
        | Change
        | Online
        | Offline
        | Other of string
      val string_of_action : Udev.Device.action -> string
      val action : Udev.Device.t -> Udev.Device.action option
      val seqnum : Udev.Device.t -> Stdint.Uint64.t
      val properties : Udev.Device.t -> (string * string) list
      val property : Udev.Device.t -> string -> string option
      val int_property : Udev.Device.t -> string -> int option
      val bool_property : Udev.Device.t -> string -> bool option
      val sysattrs : Udev.Device.t -> (string * string) list
      val sysattr : Udev.Device.t -> string -> string option
      val int_sysattr : Udev.Device.t -> string -> int option
      val bool_sysattr : Udev.Device.t -> string -> bool option
      val set_sysattr : Udev.Device.t -> string -> string -> unit
    end
  module Monitor :
    sig
      type t
      type filter =
          Tag of string
        | Subsystem_devtype of string * string option
      type netlink_source = Udev | Kernel
      val create :
        ?source:Udev.Monitor.netlink_source ->
        Udev.Context.t -> Udev.Monitor.t
      val set_filter : Udev.Monitor.t -> Udev.Monitor.filter list -> unit
      val start : Udev.Monitor.t -> unit
      exception Timeout
      val receive_device : ?timeout:float -> Udev.Monitor.t -> Udev.Device.t
      val context : Udev.Monitor.t -> Udev.Context.t
      val set_receive_buffer_size : Udev.Monitor.t -> int -> unit
      val fd : Udev.Monitor.t -> Unix.file_descr
    end
  module Enumerate :
    sig
      type filter =
          Subsystem of string
        | NoSubsystem of string
        | Sysattr of string * string
        | NoSysattr of string * string
        | Property of string * string
        | Sysname of string
        | Tag of string
        | Parent of Udev.Device.t
        | Is_initialized
      val devices :
        Udev.Context.t -> Udev.Enumerate.filter list -> Udev.Device.t list
      val subsystems :
        Udev.Context.t -> Udev.Enumerate.filter list -> Udev.Device.t list
    end
end