// Generated from WebIDL - DO NOT EDIT
// Source: @webref/idl/csp-next

///|
/// ScriptingPolicyViolationType enum
pub(all) enum ScriptingPolicyViolationType {
  ExternalScript
  InlineScript
  InlineEventHandler
  Eval
} derive(Eq, Show)

///|
/// Convert to string value
pub fn ScriptingPolicyViolationType::to_string(
  self : ScriptingPolicyViolationType,
) -> String {
  match self {
    ScriptingPolicyViolationType::ExternalScript => "externalScript"
    ScriptingPolicyViolationType::InlineScript => "inlineScript"
    ScriptingPolicyViolationType::InlineEventHandler => "inlineEventHandler"
    ScriptingPolicyViolationType::Eval => "eval"
  }
}

///|
/// Parse from string value
pub fn ScriptingPolicyViolationType::from_string(
  s : String,
) -> ScriptingPolicyViolationType? {
  match s {
    "externalScript" => Some(ScriptingPolicyViolationType::ExternalScript)
    "inlineScript" => Some(ScriptingPolicyViolationType::InlineScript)
    "inlineEventHandler" =>
      Some(ScriptingPolicyViolationType::InlineEventHandler)
    "eval" => Some(ScriptingPolicyViolationType::Eval)
    _ => None
  }
}

///|
/// ScriptingPolicyReportBody dictionary
pub(all) struct ScriptingPolicyReportBody {
  violationType : String?
  violationURL : Nullable[String]
  violationSample : Nullable[String]
  lineno : Int?
  colno : Int?
}

///|
/// Create a new ScriptingPolicyReportBody with default values
pub fn ScriptingPolicyReportBody::default() -> ScriptingPolicyReportBody {
  ScriptingPolicyReportBody::{
    violationType: None,
    violationURL: Nullable::Undefined,
    violationSample: Nullable::Undefined,
    lineno: None,
    colno: None,
  }
}

///|
extern "js" fn ScriptingPolicyReportBody::to_js_ffi(
  self : ScriptingPolicyReportBody,
) -> JsValue =
  #| (self) => ({
  #|   violationType: self.violationType,
  #|   violationURL: ((() => { const v = self.violationURL; if (v.$tag === 0) return undefined; if (v.$tag === 1) return null; return v._0; })()),
  #|   violationSample: ((() => { const v = self.violationSample; if (v.$tag === 0) return undefined; if (v.$tag === 1) return null; return v._0; })()),
  #|   lineno: self.lineno,
  #|   colno: self.colno
  #| })

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

///|
extern "js" fn ScriptingPolicyReportBody::from_js_ffi(
  value : JsValue,
) -> ScriptingPolicyReportBody =
  #| (v) => ({
  #|   violationType: v.violationType,
  #|   violationURL: (v.violationURL === undefined ? { $tag: 0 } : v.violationURL === null ? { $tag: 1 } : { $tag: 2, _0: v.violationURL }),
  #|   violationSample: (v.violationSample === undefined ? { $tag: 0 } : v.violationSample === null ? { $tag: 1 } : { $tag: 2, _0: v.violationSample }),
  #|   lineno: v.lineno,
  #|   colno: v.colno
  #| })

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