sig
  type bytes = private Core.Std.Int63.t
  type inodes = private Core.Std.Int63.t
  val bytes : Core.Std.Int63.t -> Unix.Quota.bytes
  val inodes : Core.Std.Int63.t -> Unix.Quota.inodes
  type 'units limit = {
    soft : 'units option;
    hard : 'units option;
    grace : Core.Std.Time.t option;
  }
  type 'units usage = private 'units
  val query :
    [ `Group | `User ] ->
    id:int ->
    path:string ->
    (Unix.Quota.bytes Unix.Quota.limit *
     Unix.Quota.bytes Unix.Quota.usage *
     Unix.Quota.inodes Unix.Quota.limit *
     Unix.Quota.inodes Unix.Quota.usage)
    Core.Std.Or_error.t
  val set :
    [ `Group | `User ] ->
    id:int ->
    path:string ->
    Unix.Quota.bytes Unix.Quota.limit ->
    Unix.Quota.inodes Unix.Quota.limit ->
    unit Core.Std.Or_error.t
  val bytes_of_sexp : Sexplib.Sexp.t -> Unix.Quota.bytes
  val sexp_of_bytes : Unix.Quota.bytes -> Sexplib.Sexp.t
  val inodes_of_sexp : Sexplib.Sexp.t -> Unix.Quota.inodes
  val sexp_of_inodes : Unix.Quota.inodes -> Sexplib.Sexp.t
  val limit_of_sexp :
    (Sexplib.Sexp.t -> 'units) ->
    Sexplib.Sexp.t -> 'units Unix.Quota.limit
  val sexp_of_limit :
    ('units -> Sexplib.Sexp.t) ->
    'units Unix.Quota.limit -> Sexplib.Sexp.t
end