Last active
August 7, 2017 12:07
-
-
Save fommil/d80d397819edbdd72a680c9ddceb2683 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package xmlformat | |
import scala.xml._ | |
import export._ | |
import shapeless._ | |
import shapeless.labelled._ | |
trait Encoder[A] { | |
def toXml(a: A): NodeSeq | |
} | |
object Encoder extends EncoderLowPriority | |
@imports[Encoder] | |
trait EncoderLowPriority { | |
implicit val EncoderString: Encoder[String] = new Encoder[String] { | |
override def toXml(a: String): NodeSeq = ??? | |
} | |
implicit def EncoderOption[A: Encoder]: Encoder[Option[A]] = | |
new Encoder[Option[A]] { | |
override def toXml(a: Option[A]): NodeSeq = ??? | |
} | |
} | |
trait DerivedEncoder[T] extends Encoder[T] | |
@exports object DerivedEncoder { | |
implicit def gen[T, Repr]( | |
implicit | |
G: LabelledGeneric.Aux[T, Repr], | |
LER: Cached[Strict[DerivedEncoder[Repr]]] | |
): DerivedEncoder[T] = ??? | |
implicit def hnil: DerivedEncoder[HNil] = ??? | |
implicit def hcons[Key <: Symbol, Value, Remaining <: HList]( | |
implicit Key: Witness.Aux[Key], | |
LEV: Lazy[Encoder[Value]], | |
LER: DerivedEncoder[Remaining] | |
): DerivedEncoder[FieldType[Key, Value] :: Remaining] = ??? | |
implicit def cnil: DerivedEncoder[CNil] = null | |
implicit def ccons[Name <: Symbol, Instance, Remaining <: Coproduct]( | |
implicit | |
Name: Witness.Aux[Name], | |
LEI: Lazy[Encoder[Instance]], | |
LER: DerivedEncoder[Remaining] | |
): DerivedEncoder[FieldType[Name, Instance] :+: Remaining] = ??? | |
} | |
package examples { | |
sealed trait SimpleTrait | |
final case class Foo(s: String) extends SimpleTrait | |
final case class Bar() extends SimpleTrait | |
case object Baz extends SimpleTrait | |
final case class Faz(o: Option[String]) extends SimpleTrait | |
} | |
object Example { | |
import examples._ | |
import DerivedEncoder.exports._ | |
implicitly[Encoder[Foo]] | |
implicitly[Encoder[Option[String]]] | |
// implicitly[Encoder[SimpleTrait]] | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment