client_info.pony

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

interface val ClientInfo
  fun val name(): String
  fun val version(): (String | None)

primitive ParseClientInfo
  fun apply(obj: json.Object val): (ClientInfo | String) =>
    let name': String =
      try
        match obj("name")?
        | let str: String =>
          str.clone()
        else
          return "clientInfo.name must be of type string"
        end
      else
        return "clientInfo must contain 'name'"
      end
    let version': (String | None) =
      try
        match obj("version")?
        | let str: String =>
          str.clone()
        else
          return "clientInfo.version must be of type string"
        end
      end
    object val is ClientInfo
      fun val name(): String => name'
      fun val version(): (String | None) => version'
    end