case class User
2 つのケース クラスがあります。それらを&と呼びましょうcase class Ticket
。これらのケース クラスは両方とも、同じTypeClass
、この場合は Argonaut の のメンバーであるために必要な操作を実装しEncodeJson
ます。
両方が拡張する空のマーカー タイプを作成せずに、これら 2 つの別々のタイプを同じものとして表示することは可能ですか?
trait Marker
case class User extends Marker
case class Ticket extends Marker
これを具体的にするために、これらのケース クラスを返す 2 つの別個の関数があります。
case class GetUser(userId: Long) extends Service[Doesn't Matter, User] {
def apply(req: Doesn't Matter): Future[User] = {
magical and awesome business logic
return Future[User]
}
}
case class GetTicket(ticketId: Long) extends Service[Doesn't Matter, Ticket] {
def apply(req: Doesn't Matter): Future[Ticket] = {
magical and awesome business logic
return Future[Ticket]
}
}
これら 2 つのサービスが同じ型 (この場合は ) を返すように構成したいと思いますargonaut.Json
が、暗黙的な変換に対するコンパイラの応答は "LOLNO" です。
implicit def anyToJson[A](a: A)(implicit e: EncodeJson[A]): Json = e(a)
何か案は?ありがとう!