// Do not edit. This file is generated.
// MoonBit type: AnimationPlayState
// Specifications: web-animations.idl

///|
pub(all) enum AnimationPlayState {
  Idle
  Running
  Paused
  Finished
} derive(Eq)

///|
pub impl Show for AnimationPlayState with output(
  self : AnimationPlayState,
  logger : &Logger,
) -> Unit {
  match self {
    AnimationPlayState::Idle => logger.write_string("Idle")
    AnimationPlayState::Running => logger.write_string("Running")
    AnimationPlayState::Paused => logger.write_string("Paused")
    AnimationPlayState::Finished => logger.write_string("Finished")
  }
}

///|
pub impl TJsValue for AnimationPlayState with to_js(self : AnimationPlayState) -> JsValue {
  match self {
    AnimationPlayState::Idle => TJsValue::to_js("idle")
    AnimationPlayState::Running => TJsValue::to_js("running")
    AnimationPlayState::Paused => TJsValue::to_js("paused")
    AnimationPlayState::Finished => TJsValue::to_js("finished")
  }
}

///|
pub fn AnimationPlayState::from(value : String) -> AnimationPlayState? {
  match value {
    "idle" => Some(AnimationPlayState::Idle)
    "running" => Some(AnimationPlayState::Running)
    "paused" => Some(AnimationPlayState::Paused)
    "finished" => Some(AnimationPlayState::Finished)
    _ => None
  }
}

///|
fn AnimationPlayState::from_unchecked(value : String) -> AnimationPlayState {
  match value {
    "idle" => AnimationPlayState::Idle
    "running" => AnimationPlayState::Running
    "paused" => AnimationPlayState::Paused
    "finished" => AnimationPlayState::Finished
    _ => AnimationPlayState::Idle
  }
}

///|
pub fn AnimationPlayState::value(self : AnimationPlayState) -> String {
  match self {
    AnimationPlayState::Idle => "idle"
    AnimationPlayState::Running => "running"
    AnimationPlayState::Paused => "paused"
    AnimationPlayState::Finished => "finished"
  }
}

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