// Generated from WebIDL - DO NOT EDIT
// Source: @webref/idl/storage-buckets

///|
/// StorageBucketOptions dictionary
pub(all) struct StorageBucketOptions {
  persisted : Bool?
  quota : Int64?
  expires : DOMHighResTimeStamp?
}

///|
/// Create a new StorageBucketOptions with default values
pub fn StorageBucketOptions::default() -> StorageBucketOptions {
  StorageBucketOptions::{ persisted: None, quota: None, expires: None }
}

///|
extern "js" fn StorageBucketOptions::to_js_ffi(
  self : StorageBucketOptions,
) -> JsValue =
  #| (self) => ({
  #|   persisted: (self.persisted === -1 ? undefined : self.persisted),
  #|   quota: self.quota,
  #|   expires: ((() => { const v = self.expires; if (v === undefined || v.$tag !== 1) return undefined; return v._0; })())
  #| })

///|
/// Convert to JsValue
pub fn StorageBucketOptions::to_js(self : StorageBucketOptions) -> JsValue {
  StorageBucketOptions::to_js_ffi(self)
}

///|
extern "js" fn StorageBucketOptions::from_js_ffi(
  value : JsValue,
) -> StorageBucketOptions =
  #| (v) => ({
  #|   persisted: (v.persisted === undefined ? -1 : v.persisted),
  #|   quota: v.quota,
  #|   expires: (v.expires === undefined ? { $tag: 0 } : { $tag: 1, _0: v.expires })
  #| })

///|
/// Convert from JsValue
pub fn StorageBucketOptions::from_js(value : JsValue) -> StorageBucketOptions {
  StorageBucketOptions::from_js_ffi(value)
}

///|
/// StorageBucketManager interface
pub type StorageBucketManager

///|
pub extern "js" fn StorageBucketManager::to_js_value(
  self : StorageBucketManager,
) -> JsValue =
  #| (self) => self

///|
/// Cast JsValue to StorageBucketManager (unchecked)
pub extern "js" fn StorageBucketManager::from_js_value(
  v : JsValue,
) -> StorageBucketManager =
  #| (v) => v

///|
/// Safely cast JsValue to StorageBucketManager (checked with instanceof)
pub extern "js" fn StorageBucketManager::from_js_value_opt(
  v : JsValue,
) -> StorageBucketManager? =
  #| (v) => (v instanceof StorageBucketManager) ? { $tag: 1, _0: v } : { $tag: 0 }

///|
/// Safely cast JsValue to StorageBucketManager (checked with instanceof)
pub extern "js" fn JsValue::as_storage_bucket_manager(
  self : JsValue,
) -> StorageBucketManager? =
  #| (self) => (self instanceof StorageBucketManager) ? { $tag: 1, _0: self } : { $tag: 0 }

///|
/// Cast JsValue to StorageBucketManager (unchecked)
pub extern "js" fn JsValue::to_storage_bucket_manager(
  self : JsValue,
) -> StorageBucketManager =
  #| (self) => self

///|
pub extern "js" fn StorageBucketManager::open(
  self : StorageBucketManager,
  name : String,
) -> Promise[StorageBucket] =
  #| (self, name) => self.open(name)

///|
extern "js" fn StorageBucketManager::open_with_options_ffi(
  self : StorageBucketManager,
  name : String,
  options : JsValue,
) -> Promise[StorageBucket] =
  #| (self, name, options) => self.open(name, options)

///|
pub fn StorageBucketManager::open_with_options(
  self : StorageBucketManager,
  name : String,
  options : StorageBucketOptions,
) -> Promise[StorageBucket] {
  StorageBucketManager::open_with_options_ffi(self, name, options.to_js())
}

///|
pub extern "js" fn StorageBucketManager::keys(
  self : StorageBucketManager,
) -> Promise[Array[String]] =
  #| (self) => self.keys()

///|
pub extern "js" fn StorageBucketManager::delete(
  self : StorageBucketManager,
  name : String,
) -> Promise[Unit] =
  #| (self, name) => self.delete(name)

///|
/// StorageBucket interface
pub type StorageBucket

///|
pub extern "js" fn StorageBucket::to_js_value(self : StorageBucket) -> JsValue =
  #| (self) => self

///|
/// Cast JsValue to StorageBucket (unchecked)
pub extern "js" fn StorageBucket::from_js_value(v : JsValue) -> StorageBucket =
  #| (v) => v

///|
/// Safely cast JsValue to StorageBucket (checked with instanceof)
pub extern "js" fn StorageBucket::from_js_value_opt(
  v : JsValue,
) -> StorageBucket? =
  #| (v) => (v instanceof StorageBucket) ? { $tag: 1, _0: v } : { $tag: 0 }

///|
/// Safely cast JsValue to StorageBucket (checked with instanceof)
pub extern "js" fn JsValue::as_storage_bucket(self : JsValue) -> StorageBucket? =
  #| (self) => (self instanceof StorageBucket) ? { $tag: 1, _0: self } : { $tag: 0 }

///|
/// Cast JsValue to StorageBucket (unchecked)
pub extern "js" fn JsValue::to_storage_bucket(self : JsValue) -> StorageBucket =
  #| (self) => self

///|
pub extern "js" fn StorageBucket::get_name(self : StorageBucket) -> String =
  #| (self) => self.name

///|
pub extern "js" fn StorageBucket::persist(
  self : StorageBucket,
) -> Promise[Bool] =
  #| (self) => self.persist()

///|
pub extern "js" fn StorageBucket::persisted(
  self : StorageBucket,
) -> Promise[Bool] =
  #| (self) => self.persisted()

///|
pub extern "js" fn StorageBucket::estimate(
  self : StorageBucket,
) -> Promise[StorageEstimate] =
  #| (self) => self.estimate().then(v => ({
  #|   usage: v.usage,
  #|   quota: v.quota
  #| }))

///|
pub extern "js" fn StorageBucket::set_expires(
  self : StorageBucket,
  expires : DOMHighResTimeStamp,
) -> Promise[Unit] =
  #| (self, expires) => self.setExpires(expires)

///|
pub extern "js" fn StorageBucket::expires(
  self : StorageBucket,
) -> Promise[DOMHighResTimeStamp?] =
  #| (self) => self.expires()

///|
pub extern "js" fn StorageBucket::get_indexed_db(
  self : StorageBucket,
) -> IDBFactory =
  #| (self) => self.indexedDB

///|
pub extern "js" fn StorageBucket::get_caches(
  self : StorageBucket,
) -> CacheStorage =
  #| (self) => self.caches

///|
pub extern "js" fn StorageBucket::get_directory(
  self : StorageBucket,
) -> Promise[FileSystemDirectoryHandle] =
  #| (self) => self.getDirectory()