identifier.pony

use json = "../json"

class val Identifier is NodeData
  let string: String

  new val create(string': String) =>
    string = string'

  fun name(): String => "Identifier"

  fun val clone(updates: ChildUpdateMap): NodeData =>
    this

  fun add_json_props(node: Node box, props: Array[(String, json.Item)]) =>
    props.push(("string", string))

primitive ParseIdentifier
  fun apply(obj: json.Object val, children: NodeSeq): (Identifier | String) =>
    let string =
      match try obj("string")? end
      | let s: String box =>
        s
      else
        return "Identifier.string must be a string"
      end
    Identifier(string.clone())