sig
  type 'rw t
  type vol_type = File | Block | Dir | Network | NetDir | Ploop
  type vol_delete_flags = Normal | Zeroed
  type vol_info = {
    typ : Libvirt.Volume.vol_type;
    capacity : int64;
    allocation : int64;
  }
  val lookup_by_name : 'Libvirt.Pool.t -> string -> 'Libvirt.Volume.t
  val lookup_by_key : 'Libvirt.Connect.t -> string -> 'Libvirt.Volume.t
  val lookup_by_path : 'Libvirt.Connect.t -> string -> 'Libvirt.Volume.t
  val pool_of_volume : 'Libvirt.Volume.t -> 'Libvirt.Pool.t
  val get_name : [ `R ] Libvirt.Volume.t -> string
  val get_key : [ `R ] Libvirt.Volume.t -> string
  val get_path : [ `R ] Libvirt.Volume.t -> string
  val get_info : [ `R ] Libvirt.Volume.t -> Libvirt.Volume.vol_info
  val get_xml_desc : [ `R ] Libvirt.Volume.t -> Libvirt.xml
  val create_xml : [> `W ] Libvirt.Pool.t -> Libvirt.xml -> unit
  val delete :
    [> `W ] Libvirt.Volume.t -> Libvirt.Volume.vol_delete_flags -> unit
  val free : [> `R ] Libvirt.Volume.t -> unit
  external const : [> `R ] Libvirt.Volume.t -> Libvirt.ro Libvirt.Volume.t
    = "%identity"
end