sig
  type mechanism_return =
      Mech_continue of OBus_auth.data
    | Mech_ok of OBus_auth.data
    | Mech_error of string
  class virtual mechanism_handler :
    object
      method abort : unit
      method data : OBus_auth.data -> OBus_auth.Client.mechanism_return Lwt.t
      method virtual init : OBus_auth.Client.mechanism_return Lwt.t
    end
  type mechanism = {
    mech_name : string;
    mech_exec : unit -> OBus_auth.Client.mechanism_handler;
  }
  val mech_name : OBus_auth.Client.mechanism -> string
  val mech_exec :
    OBus_auth.Client.mechanism -> unit -> OBus_auth.Client.mechanism_handler
  val mech_external : OBus_auth.Client.mechanism
  val mech_anonymous : OBus_auth.Client.mechanism
  val mech_dbus_cookie_sha1 : OBus_auth.Client.mechanism
  val default_mechanisms : OBus_auth.Client.mechanism list
  val authenticate :
    ?capabilities:OBus_auth.capability list ->
    ?mechanisms:OBus_auth.Client.mechanism list ->
    stream:OBus_auth.stream ->
    unit -> (OBus_address.guid * OBus_auth.capability list) Lwt.t
end