///|
pub(all) enum Severity {
  Off
  Info
  Warning
  Error
} derive(Eq, Debug)

///|
pub(all) enum StandardFilterableTriggeringRule {
  DerivativeUniformity
} derive(Eq, Debug)

///|
pub(all) enum FilterableTriggeringRule {
  Standard(StandardFilterableTriggeringRule)
  Unknown(String)
  User(String, String)
} derive(Eq, Debug)

///|
pub(all) struct DiagnosticFilter {
  new_severity : Severity
  triggering_rule : FilterableTriggeringRule
} derive(Eq, Debug)

///|
pub(all) struct DiagnosticFilterNode {
  inner : DiagnosticFilter
  parent : Handle?
} derive(Eq, Debug)

///|
pub(all) enum RayQueryIntersection {
  None
  Triangle
  Generated
  Aabb
} derive(Eq, Debug)

///|
pub(all) struct DocComments {
  types : Array[(Handle, Array[String])]
  struct_members : Array[(Handle, Int32, Array[String])]
  entry_points : Array[(Int32, Array[String])]
  functions : Array[(Handle, Array[String])]
  constants : Array[(Handle, Array[String])]
  global_variables : Array[(Handle, Array[String])]
  module_comments : Array[String]
} derive(Eq, Debug)

///|
pub fn DocComments::DocComments() -> DocComments {
  {
    types: [],
    struct_members: [],
    entry_points: [],
    functions: [],
    constants: [],
    global_variables: [],
    module_comments: [],
  }
}

///|
pub extend DiagnosticFilter with Debug::{to_repr}

///|
pub extend DiagnosticFilter with Eq::{not_equal, equal}

///|
pub extend DiagnosticFilterNode with Debug::{to_repr}

///|
pub extend DiagnosticFilterNode with Eq::{not_equal, equal}

///|
pub extend DocComments with Debug::{to_repr}

///|
pub extend DocComments with Eq::{not_equal, equal}

///|
pub extend FilterableTriggeringRule with Debug::{to_repr}

///|
pub extend FilterableTriggeringRule with Eq::{not_equal, equal}

///|
pub extend RayQueryIntersection with Debug::{to_repr}

///|
pub extend RayQueryIntersection with Eq::{not_equal, equal}

///|
pub extend Severity with Debug::{to_repr}

///|
pub extend Severity with Eq::{not_equal, equal}

///|
pub extend StandardFilterableTriggeringRule with Debug::{to_repr}

///|
pub extend StandardFilterableTriggeringRule with Eq::{not_equal, equal}