// Generated from WebIDL - DO NOT EDIT
// Source: @webref/idl/periodic-background-sync

///|
/// BackgroundSyncOptions dictionary
pub(all) struct BackgroundSyncOptions {
  minInterval : Int64?
}

///|
/// Create a new BackgroundSyncOptions with default values
pub fn BackgroundSyncOptions::default() -> BackgroundSyncOptions {
  BackgroundSyncOptions::{ minInterval: None }
}

///|
extern "js" fn BackgroundSyncOptions::to_js_ffi(
  self : BackgroundSyncOptions,
) -> JsValue =
  #| (self) => ({
  #|   minInterval: self.minInterval
  #| })

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

///|
extern "js" fn BackgroundSyncOptions::from_js_ffi(
  value : JsValue,
) -> BackgroundSyncOptions =
  #| (v) => ({
  #|   minInterval: v.minInterval
  #| })

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

///|
/// PeriodicSyncEventInit dictionary
pub(all) struct PeriodicSyncEventInit {
  tag : String
}

///|
/// Create a new PeriodicSyncEventInit with default values
pub fn PeriodicSyncEventInit::default() -> PeriodicSyncEventInit {
  PeriodicSyncEventInit::{ tag: "" }
}

///|
extern "js" fn PeriodicSyncEventInit::to_js_ffi(
  self : PeriodicSyncEventInit,
) -> JsValue =
  #| (self) => ({
  #|   tag: self.tag
  #| })

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

///|
extern "js" fn PeriodicSyncEventInit::from_js_ffi(
  value : JsValue,
) -> PeriodicSyncEventInit =
  #| (v) => ({
  #|   tag: v.tag
  #| })

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

///|
/// PeriodicSyncManager interface
pub type PeriodicSyncManager

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

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

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

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

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

///|
/// Error type for throwing methods
pub(all) enum PeriodicSyncManagerRegisterError {
  NotAllowedError(JsError)
  InvalidStateError(JsError)
  InvalidAccessError(JsError)
  OtherError(JsError)
} derive(Show)

///|
pub extern "js" fn PeriodicSyncManager::register(
  self : PeriodicSyncManager,
  tag : String,
) -> Promise[Result[Unit, PeriodicSyncManagerRegisterError]] =
  #| (self, tag) => self.register(tag).then(r => ({ $tag: 1, _0: undefined })).catch(e => ({ $tag: 0, _0: (() => { const n = (e && e.name) || ''; if (n === 'NotAllowedError') return { $tag: 0, _0: e }; if (n === 'InvalidStateError') return { $tag: 1, _0: e }; if (n === 'InvalidAccessError') return { $tag: 2, _0: e }; return { $tag: 3, _0: e }; })() }))

///|
extern "js" fn PeriodicSyncManager::register_with_options_ffi(
  self : PeriodicSyncManager,
  tag : String,
  options : JsValue,
) -> Promise[Result[Unit, PeriodicSyncManagerRegisterError]] =
  #| (self, tag, options) => self.register(tag, options).then(r => ({ $tag: 1, _0: undefined })).catch(e => ({ $tag: 0, _0: (() => { const n = (e && e.name) || ''; if (n === 'NotAllowedError') return { $tag: 0, _0: e }; if (n === 'InvalidStateError') return { $tag: 1, _0: e }; if (n === 'InvalidAccessError') return { $tag: 2, _0: e }; return { $tag: 3, _0: e }; })() }))

///|
pub fn PeriodicSyncManager::register_with_options(
  self : PeriodicSyncManager,
  tag : String,
  options : BackgroundSyncOptions,
) -> Promise[Result[Unit, PeriodicSyncManagerRegisterError]] {
  PeriodicSyncManager::register_with_options_ffi(self, tag, options.to_js())
}

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

///|
pub extern "js" fn PeriodicSyncManager::unregister(
  self : PeriodicSyncManager,
  tag : String,
) -> Promise[Unit] =
  #| (self, tag) => self.unregister(tag)

///|
/// PeriodicSyncEvent interface
pub type PeriodicSyncEvent

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

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

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

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

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

///|
pub extern "js" fn PeriodicSyncEvent::to_extendable_event(
  self : PeriodicSyncEvent,
) -> ExtendableEvent =
  #| (self) => self

///|
pub extern "js" fn PeriodicSyncEvent::to_event(
  self : PeriodicSyncEvent,
) -> Event =
  #| (self) => self

///|
extern "js" fn PeriodicSyncEvent::new_ffi(
  type_ : String,
  init_ : JsValue,
) -> PeriodicSyncEvent =
  #| (type_, init_) => new PeriodicSyncEvent(type_, init_)

///|
pub fn PeriodicSyncEvent::new(
  type_ : String,
  init_ : PeriodicSyncEventInit,
) -> PeriodicSyncEvent {
  PeriodicSyncEvent::new_ffi(type_, init_.to_js())
}

///|
pub extern "js" fn PeriodicSyncEvent::get_tag(
  self : PeriodicSyncEvent,
) -> String =
  #| (self) => self.tag