///|
pub(all) struct ObjectWriter(Map[String, Json])

///|
pub fn ObjectWriter::new() -> ObjectWriter {
  ObjectWriter(Map::new())
}

///|
pub fn[T : ToJson] ObjectWriter::optional(
  writer : ObjectWriter,
  key : String,
  value : T?,
) -> Unit {
  if value is Some(value) {
    writer.0.set(key, ToJson::to_json(value))
  }
}

///|
pub fn[T : ToJson] ObjectWriter::required(
  writer : ObjectWriter,
  key : String,
  value : T,
) -> Unit {
  writer.0.set(key, ToJson::to_json(value))
}

///|
pub fn ObjectWriter::to_json(self : ObjectWriter) -> Json {
  Json::object(self.0)
}