// Do not edit. This file is generated.
// MoonBit type: RouterCondition
// Specifications: service-workers.idl

///|
/// [RouterCondition](https://developer.mozilla.org/en-US/docs/Web/API/RouterCondition)
#external
pub type RouterCondition

///|
pub impl TJsValue for RouterCondition with to_js(self : RouterCondition) -> JsValue = "%identity"

///|
pub impl FromJsAny for RouterCondition with from_js_any(value : JsAny) -> RouterCondition = "%identity"

///|
pub fn RouterCondition::new(
  url_pattern? : &TURLPatternCompatible,
  request_method? : String,
  request_mode? : RequestMode,
  request_destination? : RequestDestination,
  running_status? : RunningStatus,
  _or? : Array[RouterCondition],
  not? : RouterCondition,
) -> RouterCondition {
  router_condition_ffi(
    match url_pattern {
      Some(v) => v.to_js()
      None => JsValue::undefined()
    },
    opt_to_js(request_method),
    opt_to_js(request_mode),
    opt_to_js(request_destination),
    opt_to_js(running_status),
    opt_to_js(_or),
    opt_to_js(not),
  )
}

///|
pub fn RouterCondition::empty() -> RouterCondition {
  router_condition_empty_ffi()
}

///|
pub fn RouterCondition::url_pattern(
  self : RouterCondition,
) -> URLPatternCompatible? {
  router_condition_get_url_pattern_ffi(TJsValue::to_js(self)).to_option()
}

///|
pub fn RouterCondition::request_method(self : RouterCondition) -> String? {
  router_condition_get_request_method_ffi(TJsValue::to_js(self)).to_option_prim()
}

///|
pub fn RouterCondition::request_mode(self : RouterCondition) -> RequestMode? {
  router_condition_get_request_mode_ffi(TJsValue::to_js(self)).to_option()
}

///|
pub fn RouterCondition::request_destination(
  self : RouterCondition,
) -> RequestDestination? {
  router_condition_get_request_destination_ffi(TJsValue::to_js(self)).to_option()
}

///|
pub fn RouterCondition::running_status(
  self : RouterCondition,
) -> RunningStatus? {
  router_condition_get_running_status_ffi(TJsValue::to_js(self)).to_option()
}

///|
pub fn RouterCondition::_or(self : RouterCondition) -> Array[RouterCondition]? {
  router_condition_get__or_ffi(TJsValue::to_js(self)).to_option()
}

///|
pub fn RouterCondition::not(self : RouterCondition) -> RouterCondition? {
  router_condition_get_not_ffi(TJsValue::to_js(self)).to_option()
}

///|
#cfg(target="js")
extern "js" fn router_condition_ffi(
  url_pattern : JsValue,
  request_method : JsValue,
  request_mode : JsValue,
  request_destination : JsValue,
  running_status : JsValue,
  _or : JsValue,
  not : JsValue,
) -> RouterCondition =
  #|(urlPattern, requestMethod, requestMode, requestDestination, runningStatus, _or, not) => {
  #|  const obj = {};
  #|  if (urlPattern !== undefined) obj.urlPattern = urlPattern;
  #|  if (requestMethod !== undefined) obj.requestMethod = requestMethod;
  #|  if (requestMode !== undefined) obj.requestMode = requestMode;
  #|  if (requestDestination !== undefined) obj.requestDestination = requestDestination;
  #|  if (runningStatus !== undefined) obj.runningStatus = runningStatus;
  #|  if (_or !== undefined) obj._or = _or;
  #|  if (not !== undefined) obj.not = not;
  #|  return obj;
  #|}

///|
#cfg(target="js")
extern "js" fn router_condition_empty_ffi() -> RouterCondition = "() => {}"

///|
#cfg(target="js")
extern "js" fn router_condition_get_url_pattern_ffi(obj : JsValue) -> JsValue = "(obj) => obj.urlPattern"

///|
#cfg(target="js")
extern "js" fn router_condition_get_request_method_ffi(
  obj : JsValue,
) -> JsValue = "(obj) => obj.requestMethod"

///|
#cfg(target="js")
extern "js" fn router_condition_get_request_mode_ffi(obj : JsValue) -> JsValue = "(obj) => obj.requestMode"

///|
#cfg(target="js")
extern "js" fn router_condition_get_request_destination_ffi(
  obj : JsValue,
) -> JsValue = "(obj) => obj.requestDestination"

///|
#cfg(target="js")
extern "js" fn router_condition_get_running_status_ffi(
  obj : JsValue,
) -> JsValue = "(obj) => obj.runningStatus"

///|
#cfg(target="js")
extern "js" fn router_condition_get__or_ffi(obj : JsValue) -> JsValue = "(obj) => obj._or"

///|
#cfg(target="js")
extern "js" fn router_condition_get_not_ffi(obj : JsValue) -> JsValue = "(obj) => obj.not"

///|
#cfg(target="wasm-gc")
fn router_condition_ffi(
  url_pattern : JsValue,
  request_method : JsValue,
  request_mode : JsValue,
  request_destination : JsValue,
  running_status : JsValue,
  _or : JsValue,
  not : JsValue,
) -> RouterCondition = "webapi_RouterCondition" "new"

///|
#cfg(target="wasm-gc")
fn router_condition_empty_ffi() -> RouterCondition = "webapi_Dictionary" "empty"

///|
#cfg(target="wasm-gc")
fn router_condition_get_url_pattern_ffi(obj : JsValue) -> JsValue = "webapi_RouterCondition" "get_urlPattern"

///|
#cfg(target="wasm-gc")
fn router_condition_get_request_method_ffi(obj : JsValue) -> JsValue = "webapi_RouterCondition" "get_requestMethod"

///|
#cfg(target="wasm-gc")
fn router_condition_get_request_mode_ffi(obj : JsValue) -> JsValue = "webapi_RouterCondition" "get_requestMode"

///|
#cfg(target="wasm-gc")
fn router_condition_get_request_destination_ffi(obj : JsValue) -> JsValue = "webapi_RouterCondition" "get_requestDestination"

///|
#cfg(target="wasm-gc")
fn router_condition_get_running_status_ffi(obj : JsValue) -> JsValue = "webapi_RouterCondition" "get_runningStatus"

///|
#cfg(target="wasm-gc")
fn router_condition_get__or_ffi(obj : JsValue) -> JsValue = "webapi_RouterCondition" "get__or"

///|
#cfg(target="wasm-gc")
fn router_condition_get_not_ffi(obj : JsValue) -> JsValue = "webapi_RouterCondition" "get_not"