Skip to content

Instantly share code, notes, and snippets.

@fancellu
Created April 8, 2020 12:58
Show Gist options
  • Star 2 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save fancellu/b145ed3a0a27c6a1c414c0d485a44d37 to your computer and use it in GitHub Desktop.
Save fancellu/b145ed3a0a27c6a1c414c0d485a44d37 to your computer and use it in GitHub Desktop.
Little Finch/Circe app, that shows how to get None not being emitted as Null
import cats.effect.IO
import com.twitter.app.Flag
import com.twitter.finagle.http.{Request, Response}
import com.twitter.finagle.{Http, ListeningServer, Service}
import com.twitter.server.TwitterServer
import com.twitter.util.Await
import io.finch.catsEffect._
import io.finch._
import io.finch.circe.dropNullValues._
import io.circe.generic.auto._
object FinchRestWithNoNulls extends TwitterServer {
final case class Foo(id: String, op: Option[String]=None)
def getFooList(a:String = "")= List(Foo("1", Option("hello")), Foo("2"))
val fooListApi: Endpoint[IO, List[Foo]] = get("v1" :: "foos" ) {
Ok(getFooList())
}
// Finch-finagle service
val apiService: Service[Request, Response] = Bootstrap.
//serve[Application.Json](fooApi).toService
serve[Application.Json] (fooListApi).toService
val port: Flag[Int] = flag("port", 8081, "TCP port for HTTP server")
def main(): Unit = {
val server: ListeningServer = Http.server.serve(s":${port()}", apiService)
println("Listening: " + port() )
onExit { server.close() }
Await.ready(adminHttpServer)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment