sig
  type ('a, 'b) t = ('a, 'b) Libvirt.job_t
  type job_type = Bounded | Unbounded
  type job_state = Running | Complete | Failed | Cancelled
  type job_info = {
    typ : Libvirt.Job.job_type;
    state : Libvirt.Job.job_state;
    running_time : int;
    remaining_time : int;
    percent_complete : int;
  }
  val get_info : ('a, 'b) Libvirt.Job.t -> Libvirt.Job.job_info
  val get_domain : ([ `Domain ], 'a) Libvirt.Job.t -> 'Libvirt.Domain.t
  val get_network : ([ `Network ], 'a) Libvirt.Job.t -> 'Libvirt.Network.t
  val cancel : ('a, 'b) Libvirt.Job.t -> unit
  val free : ('a, [> `R ]) Libvirt.Job.t -> unit
  external const :
    ('a, [> `R ]) Libvirt.Job.t -> ('a, Libvirt.ro) Libvirt.Job.t
    = "%identity"
end