// ===== GENERATED FILE — DO NOT EDIT(生成物禁手写,世界宪法 §4.1)=====
// 源表:skelgen/jsonld_gen/jsonld_gen.toml(schema 1.0)
// 再生:moon run skelgen/jsonld_gen/cmd(改表 → 重跑 → 黄金门对拍)
// 绑定器:skelgen/jsonld_toml_gen.mbt(parse / validate / emit)

///|
/// 步骤表全量枚举([[steps]])
pub(all) enum JsonLdStep {
  ExpansionEntry
  ExpansionExpandValue
  ExpansionExpandArray
  ExpansionExpandObject
  ExpansionPostprocess
  TorfEntry
  TorfEmit
}

///|
/// 步骤 id(账面对照用)
pub fn JsonLdStep::id(self : JsonLdStep) -> String {
  match self {
    ExpansionEntry => "expansion.entry"
    ExpansionExpandValue => "expansion.expand_value"
    ExpansionExpandArray => "expansion.expand_array"
    ExpansionExpandObject => "expansion.expand_object"
    ExpansionPostprocess => "expansion.postprocess"
    TorfEntry => "torf.entry"
    TorfEmit => "torf.emit"
  }
}

///|
/// next 边([[steps]].next;缺省 = 本阶段终点)
pub fn JsonLdStep::next_step(self : JsonLdStep) -> JsonLdStep? {
  match self {
    ExpansionEntry => None
    ExpansionExpandValue => Some(ExpansionPostprocess)
    ExpansionExpandArray => Some(ExpansionPostprocess)
    ExpansionExpandObject => Some(ExpansionPostprocess)
    ExpansionPostprocess => None
    TorfEntry => Some(TorfEmit)
    TorfEmit => None
  }
}

///|
/// 形态分派([[steps]].dispatch;词表 scalar/array/object;未声明步 → None)
pub fn JsonLdStep::dispatch(self : JsonLdStep, shape : String) -> JsonLdStep? {
  match self {
    ExpansionEntry =>
      match shape {
        "scalar" => Some(ExpansionExpandValue)
        "array" => Some(ExpansionExpandArray)
        "object" => Some(ExpansionExpandObject)
        _ => None
      }
    _ => None
  }
}

///|
/// 步骤手写落点([[steps]].handler_hook;None = 无手写,调度直通)
pub fn JsonLdStep::handler(self : JsonLdStep) -> String? {
  match self {
    ExpansionEntry => None
    ExpansionExpandValue => Some("Expander::expand_value")
    ExpansionExpandArray => Some("Expander::expand_array")
    ExpansionExpandObject => None
    ExpansionPostprocess => Some("Expander::postprocess_value")
    TorfEntry => Some("ToRdfProcessor::node_to_quads")
    TorfEmit => None
  }
}

///|
/// 关键字路由行([[keyword_dispatch]];condition/result 为可枚举词表)
pub(all) struct JsonLdKeywordRoute {
  keyword : String
  condition : String
  action : String
  result : String
  args_vocab : Bool?
  args_document_relative : Bool?
  handler : String?
}

///|
/// 关键字路由(未知键落缺省臂 _term;表无缺省臂时返回 None)
pub fn jsonld_keyword_route(keyword : String) -> JsonLdKeywordRoute? {
  match keyword {
    "@id" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@id",
        condition: "string",
        action: "expand_iri",
        result: "iri",
        args_vocab: Some(false),
        args_document_relative: Some(true),
        handler: Some("IriExpander::expand_iri"),
      })
    "@type" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@type",
        condition: "string_or_string_array",
        action: "expand_iri",
        result: "iri",
        args_vocab: Some(true),
        args_document_relative: Some(false),
        handler: Some("IriExpander::expand_iri"),
      })
    "@value" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@value",
        condition: "scalar_or_null",
        action: "expand_value",
        result: "value_object",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::expand_value"),
      })
    "@language" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@language",
        condition: "string",
        action: "set_language",
        result: "value_object",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::set_language"),
      })
    "@direction" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@direction",
        condition: "ltr_or_rtl",
        action: "set_direction",
        result: "value_object",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::set_direction"),
      })
    "@list" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@list",
        condition: "array_or_object",
        action: "expand_list",
        result: "list_object",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::expand_list"),
      })
    "@set" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@set",
        condition: "any",
        action: "expand_set",
        result: "array",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::expand_set"),
      })
    "@graph" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@graph",
        condition: "any",
        action: "expand_graph",
        result: "graph",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::expand_graph"),
      })
    "@reverse" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@reverse",
        condition: "object",
        action: "expand_reverse",
        result: "property",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::expand_reverse"),
      })
    "@nest" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@nest",
        condition: "object",
        action: "expand_nest",
        result: "property",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::expand_nest"),
      })
    "@included" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@included",
        condition: "object_or_array",
        action: "expand_included",
        result: "array",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::expand_included"),
      })
    "@index" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@index",
        condition: "string",
        action: "set_index",
        result: "index",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::set_index"),
      })
    "@context" =>
      Some(JsonLdKeywordRoute::{
        keyword: "@context",
        condition: "object_or_array",
        action: "process_context",
        result: "context",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("ContextProcessor::process_context"),
      })
    _ =>
      Some(JsonLdKeywordRoute::{
        keyword: "_term",
        condition: "default",
        action: "expand_term",
        result: "property",
        args_vocab: None,
        args_document_relative: None,
        handler: Some("Expander::expand_term"),
      })
  }
}

///|
/// 关键字路由全表(表序;覆盖门用)
pub fn jsonld_keyword_routes() -> Array[JsonLdKeywordRoute] {
  [
    JsonLdKeywordRoute::{
      keyword: "@id",
      condition: "string",
      action: "expand_iri",
      result: "iri",
      args_vocab: Some(false),
      args_document_relative: Some(true),
      handler: Some("IriExpander::expand_iri"),
    },
    JsonLdKeywordRoute::{
      keyword: "@type",
      condition: "string_or_string_array",
      action: "expand_iri",
      result: "iri",
      args_vocab: Some(true),
      args_document_relative: Some(false),
      handler: Some("IriExpander::expand_iri"),
    },
    JsonLdKeywordRoute::{
      keyword: "@value",
      condition: "scalar_or_null",
      action: "expand_value",
      result: "value_object",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::expand_value"),
    },
    JsonLdKeywordRoute::{
      keyword: "@language",
      condition: "string",
      action: "set_language",
      result: "value_object",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::set_language"),
    },
    JsonLdKeywordRoute::{
      keyword: "@direction",
      condition: "ltr_or_rtl",
      action: "set_direction",
      result: "value_object",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::set_direction"),
    },
    JsonLdKeywordRoute::{
      keyword: "@list",
      condition: "array_or_object",
      action: "expand_list",
      result: "list_object",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::expand_list"),
    },
    JsonLdKeywordRoute::{
      keyword: "@set",
      condition: "any",
      action: "expand_set",
      result: "array",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::expand_set"),
    },
    JsonLdKeywordRoute::{
      keyword: "@graph",
      condition: "any",
      action: "expand_graph",
      result: "graph",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::expand_graph"),
    },
    JsonLdKeywordRoute::{
      keyword: "@reverse",
      condition: "object",
      action: "expand_reverse",
      result: "property",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::expand_reverse"),
    },
    JsonLdKeywordRoute::{
      keyword: "@nest",
      condition: "object",
      action: "expand_nest",
      result: "property",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::expand_nest"),
    },
    JsonLdKeywordRoute::{
      keyword: "@included",
      condition: "object_or_array",
      action: "expand_included",
      result: "array",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::expand_included"),
    },
    JsonLdKeywordRoute::{
      keyword: "@index",
      condition: "string",
      action: "set_index",
      result: "index",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::set_index"),
    },
    JsonLdKeywordRoute::{
      keyword: "@context",
      condition: "object_or_array",
      action: "process_context",
      result: "context",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("ContextProcessor::process_context"),
    },
    JsonLdKeywordRoute::{
      keyword: "_term",
      condition: "default",
      action: "expand_term",
      result: "property",
      args_vocab: None,
      args_document_relative: None,
      handler: Some("Expander::expand_term"),
    },
  ]
}

///|
/// IRI 规则路由行([[iri_rules]];handler = None 的行走骨架缺省实现)
pub(all) struct JsonLdIriRoute {
  order : Int
  kind : String
  condition : String
  action : String
  handler : String?
}

///|
/// IRI 规则表(order 升序 = 求值顺序)
pub fn jsonld_iri_routes() -> Array[JsonLdIriRoute] {
  [
    JsonLdIriRoute::{
      order: 1,
      kind: "keyword",
      condition: "starts_with_at",
      action: "return_keyword",
      handler: Some("IriExpander::handle_keyword"),
    },
    JsonLdIriRoute::{
      order: 2,
      kind: "term",
      condition: "term_defined",
      action: "lookup_term",
      handler: Some("IriExpander::lookup_term"),
    },
    JsonLdIriRoute::{
      order: 3,
      kind: "bnode",
      condition: "is_bnode",
      action: "return_as_is",
      handler: None,
    },
    JsonLdIriRoute::{
      order: 4,
      kind: "compact",
      condition: "has_prefix",
      action: "expand_compact",
      handler: Some("IriExpander::expand_compact"),
    },
    JsonLdIriRoute::{
      order: 5,
      kind: "absolute",
      condition: "has_valid_scheme",
      action: "return_as_is",
      handler: None,
    },
    JsonLdIriRoute::{
      order: 6,
      kind: "vocab",
      condition: "vocab_base_set",
      action: "concat_vocab",
      handler: Some("IriExpander::concat_vocab"),
    },
    JsonLdIriRoute::{
      order: 7,
      kind: "relative",
      condition: "base_set",
      action: "resolve_base",
      handler: Some("IriExpander::resolve_base"),
    },
  ]
}