Search code examples
scalaspray-jsoncompanion-object

Which among importing companion object or extending trait is better


I have a JSON protocol written in spray

trait MyJsonProtocol {
   //some logic
}

object MyJsonProtocol extends MyJsonProtocol {

}

Now which is better ?? Importing this companion object or extending the trait ?


Solution

  • If you are creating some JsonFormat instances for spray, then you can just create an object directly and import that. This means that you only have a single instance of your implicit vals and objects.

    object MyJsonProtocol extends DefaultJsonProtocol {
      implicit object MyTypeJsonFormat extends RootJsonFormat[MyType] {
        def write(v: MyType): JsValue = ...
        def read(value: JsValue): MyType = ...
      }
    
      implicit val myClassFormat = jsonFormat5(MyClass)
    }
    
    class OtherClass {
      import MyJsonProtocol._
    
      ...
    }