initialize_result.pony

use json = "../../../json"

use s_caps = "server_capabilities"
use ".."

interface val InitializeResult is ResultData
  fun val capabilities(): s_caps.ServerCapabilities
  fun val serverInfo(): (ServerInfo | None)

  fun val get_json(): json.Item =>
    let props =
      [ as (String, json.Item): ("capabilities", capabilities().get_json()) ]
    match serverInfo()
    | let si: ServerInfo =>
      props.push(("serverInfo", si.get_json()))
    end
    json.Object(props)

interface val ServerInfo is ResultData
  fun val name(): String
  fun val version(): (String | None)

  fun val get_json(): json.Item =>
    let props = [ as (String, json.Item): ("name", name()) ]
    match version()
    | let v: String =>
      props.push(("version", v))
    end
    json.Object(props)