module libwasm.bindings.Permissions;

import libwasm.types;

import memutils.ct: tuple;
import libwasm.bindings.PermissionStatus;

@safe:
nothrow:

struct PermissionDescriptor {
  nothrow:
  JsHandle handle;
  alias handle this;
  this(Handle h) {
    this.handle = JsHandle(h);
  }
  static auto create() {
    return PermissionDescriptor(libwasm_add__object());
  }
  void name()(PermissionName name) {
    Object_Call_int__void(this.handle, "name", name);
  }
  PermissionName name()() {
    return Object_Getter__int(this.handle, "name");
  }
}
enum PermissionName {
  geolocation,
  notifications,
  push,
  persistent_storage
}
struct Permissions {
  nothrow:
  JsHandle handle;
  alias handle this;
  this(Handle h) {
    this.handle = JsHandle(h);
  }
  auto query()(scope ref JsObject permission) {
    return JsPromise!(PermissionStatus)(Object_Call_Handle__Handle(this.handle, "query", permission.handle));
  }
  auto revoke()(scope ref JsObject permission) {
    return JsPromise!(PermissionStatus)(Object_Call_Handle__Handle(this.handle, "revoke", permission.handle));
  }
}