literal_float.pony

use json = "../json"

class val LiteralFloat is NodeDataWithValue[LiteralFloat, F64]
  let _value: F64

  new val create(value': F64) =>
    _value = value'

  fun name(): String => "LiteralFloat"

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

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

  fun value(): F64 => _value

primitive ParseLiteralFloat
  fun apply(obj: json.Object val, children: NodeSeq): (LiteralFloat | String) =>
    let value =
      match try obj("value")? end
      | let float: F64 =>
        float
      | let int: I128 =>
        F64.from[I128](int)
      else
        return "LiteralFloat.value must be a float"
      end
    LiteralFloat(value)