Сериализация черты в Json - PullRequest
       29

Сериализация черты в Json

0 голосов
/ 16 апреля 2019

Я написал библиотеку, в которой пользователи могут предоставлять пользовательские реализации полей некоторого класса. Теперь оказывается, что мой библиотечный код должен сериализовать эти классы в json, что кажется невозможным для библиотек, которые мне нравятся circe или argonaut.

Вот упрощенный пример

case class LibraryObject(field: FieldOfCustomType, otherField: String)
trait FieldOfCustomType

import argonaut.Argonaut._
import argonaut.ArgonautShapeless._
// won't work, no instance of EncodeJson[FieldOfCustomType]
libraryObject.asJson.nospaces 

и это имеет смысл для меня. Я чувствую, что должен позволить пользователю разрешить им определять пользовательский сериализатор / десериализатор. Но я не знаю, как сделать это решение чистым, так как мой нынешний подход кажется хакерским:

// require user to include implementation on classpath
trait FieldOfCustomTypeJsonFactory {
  def toJson(obj: FieldOfCustomType): String
  def fromJson(json: String): FieldOfCustomType
}

Я действительно надеюсь, что у некоторых из вас есть лучшие идеи. Но я боюсь, что я ничего не могу с этим поделать из-за характера проблемы во время выполнения.

...