2017-11-13 16 views
1

나는 원에서 JSON으로 자동 일반적인 마샬를 사용하려면circe에서 Scala의 generic을 사용하는 방법은 무엇입니까?</p> <pre><code>def printTest[T<: Product](resourse: ResourcePartTest[T]): Unit = { import io.circe.generic.auto._ import io.circe.syntax._ println(resourse.asJson) } </code></pre> <p>하지만 Exeption 수 있습니다 :

Error:(29, 22) could not find implicit value for parameter encoder: io.circe.Encoder[com.moex.regulatory.standards.intermediate.v23.ResourcePartTest[T]] 
    println(resourse.asJson) 

Error:(29, 22) not enough arguments for method asJson: (implicit encoder: io.circe.Encoder[com.moex.regulatory.standards.intermediate.v23.ResourcePartTest[T]])io.circe.Json. 
Unspecified value parameter encoder. 
    println(resourse.asJson) 

나는 일반에 대한 자동 마샬를 사용할 수 있습니까?

답변

1

내가 정의하는 방법을 ResourceParTest 모르겠지만,이 방법 밖에 일반 유도 가져 오기를 이동 증거로 Encoder[ResourcePartTest[T]]을 요구함으로써 작동합니다 :

import io.circe.Encoder 
import io.circe.generic.auto._ 
import io.circe.syntax._ 

sealed trait ResourcePartTest[T] 
case class Foo() extends ResourcePartTest[(Int, Int)] 

def printTest[T <: Product](resourse: 
          ResourcePartTest[T])(implicit ev: Encoder[ResourcePartTest[T]]): Unit = { 
    println(resourse.asJson) 
} 
+0

내가 찾은 일부 밀봉 특성 계층 구조에 대한 표준 제네릭 파생은 필요한 인코더/디코더를 제공 할 수없는 것처럼 보일 수 있지만, 'extras' 패키지 제네릭 파생이 트릭을 수행했습니다. – Kraylog

+0

@ NimrodArgov IDEA에서 실행했을 때 실제로 실제로 컴파일되었습니다. –

+1

아, 대부분의 경우 작동하지만 언급할만한 가치가 있다고 생각했습니다. – Kraylog