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

///|
pub(all) enum ClientType {
  Window
  Worker
  Sharedworker
  All
} derive(Eq)

///|
pub impl Show for ClientType with output(self : ClientType, logger : &Logger) -> Unit {
  match self {
    ClientType::Window => logger.write_string("Window")
    ClientType::Worker => logger.write_string("Worker")
    ClientType::Sharedworker => logger.write_string("Sharedworker")
    ClientType::All => logger.write_string("All")
  }
}

///|
pub impl TJsValue for ClientType with to_js(self : ClientType) -> JsValue {
  match self {
    ClientType::Window => TJsValue::to_js("window")
    ClientType::Worker => TJsValue::to_js("worker")
    ClientType::Sharedworker => TJsValue::to_js("sharedworker")
    ClientType::All => TJsValue::to_js("all")
  }
}

///|
pub fn ClientType::from(value : String) -> ClientType? {
  match value {
    "window" => Some(ClientType::Window)
    "worker" => Some(ClientType::Worker)
    "sharedworker" => Some(ClientType::Sharedworker)
    "all" => Some(ClientType::All)
    _ => None
  }
}

///|
fn ClientType::from_unchecked(value : String) -> ClientType {
  match value {
    "window" => ClientType::Window
    "worker" => ClientType::Worker
    "sharedworker" => ClientType::Sharedworker
    "all" => ClientType::All
    _ => ClientType::Window
  }
}

///|
pub fn ClientType::value(self : ClientType) -> String {
  match self {
    ClientType::Window => "window"
    ClientType::Worker => "worker"
    ClientType::Sharedworker => "sharedworker"
    ClientType::All => "all"
  }
}

///|
pub impl FromJsAny for ClientType with from_js_any(value : JsAny) -> ClientType {
  ClientType::from_unchecked(value)
}