Skip to content

Instantly share code, notes, and snippets.

@pfcoperez
Created July 1, 2016 09:04
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pfcoperez/b93f61093ef32d9a5c9356f06c6d7add to your computer and use it in GitHub Desktop.
Save pfcoperez/b93f61093ef32d9a5c9356f06c6d7add to your computer and use it in GitHub Desktop.
trait JavaJsonizer { def toJson: String }
class SimpleJavaJsonizer extends JavaJsonizer {
def toJson: String = """{"type":"Int", "pattern":"hello*"}"""
}
case class YourBuilder(underlying: JavaJsonizer, name: Option[String]) {
def build(newName: String): YourBuilder = copy(name = Some(newName))
}
object YourBuilder {
implicit def javajsonizer2yourbuilder(javajsonizer: JavaJsonizer): YourBuilder = YourBuilder(javajsonizer, None)
implicit def yourbuilder2javajsonizer(builder: YourBuilder): JavaJsonizer = builder.underlying
}
// Lets use it
import YourBuilder._
val sser = new SimpleJavaJsonizer
sser.build("hello")
sser.build("hello").toJson
@adelapena
Copy link

case class RangeMapper(@JSON from, @JSON to) extends JavaJsonizer {
def sayHello()
}

val o:RangeMapper = JavaJsonizer.toJson("{}")
o.build("hello")
o.sayHello()

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment