scala - Traits not implemented in finagle service -


i have simple finagle service follows:

import com.twitter.finagle.{http,service} import com.twitter.util.{await, future} import java.net.inetsocketaddress import org.jboss.netty.handler.codec.http._ import org.jboss.netty.buffer.channelbuffers.copiedbuffer import org.jboss.netty.util.charsetutil import net.liftweb.json._ import com.twitter.finagle.http.{request,response,richhttp} import com.twitter.finagle.builder.serverbuilder  case class add(num1:int, num2:int) case class result(result:int)    trait transformer[r1,t,u,r2] {   def extractpayload(r:r1):t   def responsepayload(u:u):r2 }  object transformer{   implicit object addpayloadtransformer          extends transformer[httprequest,add,result,httpresponse]{    implicit val formats = defaultformats     def extractpayload(r:httprequest):add = {         val body = r.getcontent     val length = body.readablebytes()     val bytes = new array[byte](length)     body.getbytes(body.readerindex(),bytes,0,length)     val bodystr = new string(bytes)     parse(bodystr).extract[add]     }     def responsepayload(u:result):httpresponse = {        val result = u.result     val response = response(httpversion.http_1_1,                 httpresponsestatus.ok)         response.setcontenttypejson()                response.setcontentstring(           s"""             {             "result": $result             }            """)         response.httpresponse    }      } }  object additionserver extends app transformer[httprequest,add,result,httpresponse]{  private def add(add:add):result = result(add.num1 + add.num2)    private def additionhandler(req:httprequest): httpresponse = {      val addpayload = extractpayload(req)      val result = add(addpayload)      responsepayload(result)      }      val service = new service[httprequest,httpresponse] {      def apply(req: httprequest): future[httpresponse] =      {        future.value(additionhandler(req))     }  }    val server = http.serve(":8080", service)   await.ready(server)   println("started service")                 } 

when try compile it, following exception:

additionservice.scala:49: object creation impossible, since: [error] has 2 unimplemented members. [error] /** seen object additionserver, missing signatures follows. [error]  *  convenience, these usable stub implementations. [error]  */ [error]   def extractpayload(r: org.jboss.netty.handler.codec.http.httprequest): add = ??? [error]   def responsepayload(u: result): org.jboss.netty.handler.codec.http.httpresponse = ??? [error] object additionserver extends app transformer[httprequest,add,result,httpresponse]{ [error]        ^ [error] 1 error found [error] (compile:compileincremental) compilation failed 

to knowledge implementing traits proper signature.

can point out might going wrong here.

thanks

additionserver object extending transformer. in code, object not defining neither extractpayload nor responsepayload compilation error get.

you should move methods definitions trait companion object additionserver

object additionserver extends app transformer[httprequest,add,result,httpresponse] {  import transformer._  def extractpayload(r:httprequest):add = {         val body = r.getcontent     val length = body.readablebytes()     val bytes = new array[byte](length)     body.getbytes(body.readerindex(),bytes,0,length)     val bodystr = new string(bytes)     parse(bodystr).extract[add] }  def responsepayload(u:result):httpresponse = {        val result = u.result     val response = response(httpversion.http_1_1,             httpresponsestatus.ok)         response.setcontenttypejson()                response.setcontentstring(           s"""             {             "result": $result             }            """)         response.httpresponse    }    } 

if you'd rather keep methods defined @ companion object can refer them additionserver:

object transformer{   implicit object addpayloadtransformer    extends transformer[httprequest,add,result,httpresponse]{    implicit val formats = defaultformats     def extractpayload(r:httprequest):add = {         val body = r.getcontent         val length = body.readablebytes()         val bytes = new array[byte](length)         body.getbytes(body.readerindex(),bytes,0,length)         val bodystr = new string(bytes)         parse(bodystr).extract[add]     }     def responsepayload(u:result):httpresponse = {            val result = u.result         val response = response(httpversion.http_1_1,             httpresponsestatus.ok)         response.setcontenttypejson()                response.setcontentstring(           s"""             {             "result": $result             }            """)         response.httpresponse    }      } }  object additionserver extends app transformer[httprequest,add,result,httpresponse]{     def extractpayload(r:httprequest):add = transformer.extractpayload(r)     def responsepayload(u:result):httpresponse = transformer.responsepayload(u)    ...   ...