sig
  type argument_filter =
      AF_string of string
    | AF_string_path of string
    | AF_namespace of string
  type arguments = private (int * OBus_match.argument_filter) list
  val make_arguments :
    (int * OBus_match.argument_filter) list -> OBus_match.arguments
  external cast_arguments :
    OBus_match.arguments -> (int * OBus_match.argument_filter) list
    = "%identity"
  type rule = {
    typ : [ `Error | `Method_call | `Method_return | `Signal ] option;
    sender : OBus_name.bus;
    interface : OBus_name.interface;
    member : OBus_name.member;
    path : OBus_path.t option;
    destination : OBus_name.bus;
    arguments : OBus_match.arguments;
    eavesdrop : bool option;
  }
  val typ :
    OBus_match.rule ->
    [ `Error | `Method_call | `Method_return | `Signal ] option
  val sender : OBus_match.rule -> OBus_name.bus
  val interface : OBus_match.rule -> OBus_name.interface
  val member : OBus_match.rule -> OBus_name.member
  val path : OBus_match.rule -> OBus_path.t option
  val destination : OBus_match.rule -> OBus_name.bus
  val arguments : OBus_match.rule -> OBus_match.arguments
  val eavesdrop : OBus_match.rule -> bool option
  val rule :
    ?typ:[ `Error | `Method_call | `Method_return | `Signal ] ->
    ?sender:OBus_name.bus ->
    ?interface:OBus_name.interface ->
    ?member:OBus_name.member ->
    ?path:OBus_path.t ->
    ?destination:OBus_name.bus ->
    ?arguments:OBus_match.arguments ->
    ?eavesdrop:bool -> unit -> OBus_match.rule
  val match_message : OBus_match.rule -> OBus_message.t -> bool
  val match_values : OBus_match.arguments -> OBus_value.V.sequence -> bool
  type comparison_result = More_general | Less_general | Equal | Incomparable
  val compare_rules :
    OBus_match.rule -> OBus_match.rule -> OBus_match.comparison_result
  exception Parse_failure of string * int * string
  val string_of_rule : OBus_match.rule -> string
  val rule_of_string : string -> OBus_match.rule
  val export :
    ?switch:Lwt_switch.t ->
    OBus_connection.t -> OBus_match.rule -> unit Lwt.t
end