diff --git a/modules/examples/routeguide/client/src/main/scala/ClientProgram.scala b/modules/examples/routeguide/client/src/main/scala/ClientProgram.scala index 7ceb7ea7b..408bd4cf8 100644 --- a/modules/examples/routeguide/client/src/main/scala/ClientProgram.scala +++ b/modules/examples/routeguide/client/src/main/scala/ClientProgram.scala @@ -19,11 +19,9 @@ package example.routeguide.client import cats.Monad import cats.syntax.flatMap._ import cats.syntax.functor._ -import freestyle.tagless._ import example.routeguide.protocol.Protocols._ import example.routeguide.common.Utils -@tagless(false) trait RouteGuideClient[F[_]] { def getFeature(lat: Int, lon: Int): F[Unit] def listFeatures(lowLat: Int, lowLon: Int, hiLat: Int, hiLon: Int): F[Unit] diff --git a/modules/examples/routeguide/client/src/main/scala/handlers/RouteGuideClientHandler.scala b/modules/examples/routeguide/client/src/main/scala/handlers/RouteGuideClientHandler.scala index f521ac6f2..b216b97ba 100644 --- a/modules/examples/routeguide/client/src/main/scala/handlers/RouteGuideClientHandler.scala +++ b/modules/examples/routeguide/client/src/main/scala/handlers/RouteGuideClientHandler.scala @@ -32,7 +32,7 @@ class RouteGuideClientHandler[F[_]: Monad]( implicit client: RouteGuideService.Client[F], M: MonadError[F, Throwable], T2F: Task ~> F) - extends RouteGuideClient.Handler[F] { + extends RouteGuideClient[F] { val logger = getLogger diff --git a/modules/examples/todolist/client/src/main/scala/clients/PingPongClient.scala b/modules/examples/todolist/client/src/main/scala/clients/PingPongClient.scala index c84999498..0d2b41693 100644 --- a/modules/examples/todolist/client/src/main/scala/clients/PingPongClient.scala +++ b/modules/examples/todolist/client/src/main/scala/clients/PingPongClient.scala @@ -17,9 +17,6 @@ package examples.todolist.client package clients -import freestyle.tagless.tagless - -@tagless(true) trait PingPongClient[F[_]] { def ping(): F[Unit] } diff --git a/modules/examples/todolist/client/src/main/scala/clients/TagClient.scala b/modules/examples/todolist/client/src/main/scala/clients/TagClient.scala index b37a8e86d..df44e482a 100644 --- a/modules/examples/todolist/client/src/main/scala/clients/TagClient.scala +++ b/modules/examples/todolist/client/src/main/scala/clients/TagClient.scala @@ -18,9 +18,7 @@ package examples.todolist.client package clients import examples.todolist.protocol.Protocols._ -import freestyle.tagless.tagless -@tagless(true) trait TagClient[F[_]] { def reset(): F[Int] diff --git a/modules/examples/todolist/client/src/main/scala/clients/TodoItemClient.scala b/modules/examples/todolist/client/src/main/scala/clients/TodoItemClient.scala index e741653a9..e537d6f0c 100644 --- a/modules/examples/todolist/client/src/main/scala/clients/TodoItemClient.scala +++ b/modules/examples/todolist/client/src/main/scala/clients/TodoItemClient.scala @@ -18,9 +18,7 @@ package examples.todolist.client package clients import examples.todolist.protocol.Protocols._ -import freestyle.tagless.tagless -@tagless(true) trait TodoItemClient[F[_]] { def reset(): F[Int] @@ -35,4 +33,4 @@ trait TodoItemClient[F[_]] { def remove(id: Int): F[Int] -} \ No newline at end of file +} diff --git a/modules/examples/todolist/client/src/main/scala/clients/TodoListClient.scala b/modules/examples/todolist/client/src/main/scala/clients/TodoListClient.scala index 31f667652..5015a2f4e 100644 --- a/modules/examples/todolist/client/src/main/scala/clients/TodoListClient.scala +++ b/modules/examples/todolist/client/src/main/scala/clients/TodoListClient.scala @@ -17,11 +17,8 @@ package examples.todolist.client package clients -import freestyle.tagless.tagless - import examples.todolist.protocol.Protocols._ -@tagless(true) trait TodoListClient[F[_]] { def reset(): F[Int] @@ -36,4 +33,4 @@ trait TodoListClient[F[_]] { def remove(id: Int): F[Int] -} \ No newline at end of file +} diff --git a/modules/examples/todolist/client/src/main/scala/handlers/PingPongClientHandler.scala b/modules/examples/todolist/client/src/main/scala/handlers/PingPongClientHandler.scala index 8bd86e059..a32295ae3 100644 --- a/modules/examples/todolist/client/src/main/scala/handlers/PingPongClientHandler.scala +++ b/modules/examples/todolist/client/src/main/scala/handlers/PingPongClientHandler.scala @@ -25,7 +25,7 @@ import freestyle.rpc.protocol.Empty import org.log4s._ class PingPongClientHandler[F[_]](implicit M: Functor[F], client: PingPongService.Client[F]) - extends PingPongClient.Handler[F] { + extends PingPongClient[F] { val logger: Logger = getLogger diff --git a/modules/examples/todolist/client/src/main/scala/handlers/TagClientHandler.scala b/modules/examples/todolist/client/src/main/scala/handlers/TagClientHandler.scala index c8a82a11e..16dc61a1a 100644 --- a/modules/examples/todolist/client/src/main/scala/handlers/TagClientHandler.scala +++ b/modules/examples/todolist/client/src/main/scala/handlers/TagClientHandler.scala @@ -29,7 +29,7 @@ class TagClientHandler[F[_]]( implicit M: Monad[F], log: LoggingM[F], client: TagRpcService.Client[F]) - extends TagClient.Handler[F] { + extends TagClient[F] { override def reset(): F[Int] = for { diff --git a/modules/examples/todolist/client/src/main/scala/handlers/TodoItemClientHandler.scala b/modules/examples/todolist/client/src/main/scala/handlers/TodoItemClientHandler.scala index a4e43c080..175e712d1 100644 --- a/modules/examples/todolist/client/src/main/scala/handlers/TodoItemClientHandler.scala +++ b/modules/examples/todolist/client/src/main/scala/handlers/TodoItemClientHandler.scala @@ -29,7 +29,7 @@ class TodoItemClientHandler[F[_]]( implicit M: Monad[F], log: LoggingM[F], client: TodoItemRpcService.Client[F]) - extends TodoItemClient.Handler[F] { + extends TodoItemClient[F] { override def reset(): F[Int] = for { diff --git a/modules/examples/todolist/client/src/main/scala/handlers/TodoListClientHandler.scala b/modules/examples/todolist/client/src/main/scala/handlers/TodoListClientHandler.scala index 51148b4a6..c4183b66b 100644 --- a/modules/examples/todolist/client/src/main/scala/handlers/TodoListClientHandler.scala +++ b/modules/examples/todolist/client/src/main/scala/handlers/TodoListClientHandler.scala @@ -29,7 +29,7 @@ class TodoListClientHandler[F[_]]( implicit M: Monad[F], log: LoggingM[F], client: TodoListRpcService.Client[F]) - extends TodoListClient.Handler[F] { + extends TodoListClient[F] { override def reset(): F[Int] = for { diff --git a/modules/server/src/main/scala/GrpcServer.scala b/modules/server/src/main/scala/GrpcServer.scala index 7c63e9382..0d1e8d6fd 100644 --- a/modules/server/src/main/scala/GrpcServer.scala +++ b/modules/server/src/main/scala/GrpcServer.scala @@ -17,13 +17,12 @@ package freestyle.rpc package server -import freestyle.tagless.tagless +import cats.~> import io.grpc._ import scala.concurrent.duration.TimeUnit -@tagless(true) -trait GrpcServer[F[_]] { +trait GrpcServer[F[_]] { self => def start(): F[Server] @@ -47,4 +46,32 @@ trait GrpcServer[F[_]] { def awaitTermination(): F[Unit] + def mapK[G[_]](fk: F ~> G): GrpcServer[G] = new GrpcServer[G] { + def start(): G[Server] = fk(self.start) + + def getPort: G[Int] = fk(self.getPort) + + def getServices: G[List[ServerServiceDefinition]] = fk(self.getServices) + + def getImmutableServices: G[List[ServerServiceDefinition]] = fk(self.getImmutableServices) + + def getMutableServices: G[List[ServerServiceDefinition]] = fk(self.getMutableServices) + + def shutdown(): G[Server] = fk(self.shutdown) + + def shutdownNow(): G[Server] = fk(self.shutdownNow) + + def isShutdown: G[Boolean] = fk(self.isShutdown) + + def isTerminated: G[Boolean] = fk(self.isTerminated) + + def awaitTerminationTimeout(timeout: Long, unit: TimeUnit): G[Boolean] = + fk(self.awaitTerminationTimeout(timeout, unit)) + + def awaitTermination(): G[Unit] = fk(self.awaitTermination) + } +} + +object GrpcServer { + def apply[F[_]](implicit F: GrpcServer[F]): GrpcServer[F] = F } diff --git a/modules/server/src/main/scala/handlers/GrpcServerHandler.scala b/modules/server/src/main/scala/handlers/GrpcServerHandler.scala index 66ed90adb..629812b5e 100644 --- a/modules/server/src/main/scala/handlers/GrpcServerHandler.scala +++ b/modules/server/src/main/scala/handlers/GrpcServerHandler.scala @@ -25,7 +25,7 @@ import io.grpc.{Server, ServerServiceDefinition} import scala.collection.JavaConverters._ import scala.concurrent.duration.TimeUnit -class GrpcServerHandler[F[_]: Applicative] extends GrpcServer.Handler[GrpcServerOps[F, ?]] { +class GrpcServerHandler[F[_]: Applicative] extends GrpcServer[GrpcServerOps[F, ?]] { def start: GrpcServerOps[F, Server] = captureWithServer { server => Runtime.getRuntime.addShutdownHook(new Thread() { diff --git a/modules/server/src/test/scala/protocol/Utils.scala b/modules/server/src/test/scala/protocol/Utils.scala index 776b14528..e784e826d 100644 --- a/modules/server/src/test/scala/protocol/Utils.scala +++ b/modules/server/src/test/scala/protocol/Utils.scala @@ -22,7 +22,6 @@ import cats.effect.Async import cats.syntax.applicative._ import freestyle.rpc.common._ import freestyle.rpc.server.implicits._ -import freestyle.tagless.tagless import io.grpc.Status import monix.reactive.Observable @@ -142,7 +141,6 @@ object Utils extends CommonUtils { object client { - @tagless(true) trait MyRPCClient[F[_]] { def notAllowed(b: Boolean): F[C] def empty: F[Empty.type] @@ -307,7 +305,7 @@ object Utils extends CommonUtils { class FreesRPCServiceClientHandler[F[_]: Async]( implicit client: RPCService.Client[F], M: MonadError[F, Throwable]) - extends MyRPCClient.Handler[F] { + extends MyRPCClient[F] { override def notAllowed(b: Boolean): F[C] = client.notAllowed(b) @@ -413,7 +411,7 @@ object Utils extends CommonUtils { class FreesRPCServiceClientCompressedHandler[F[_]: Async]( implicit client: RPCService.Client[F], M: MonadError[F, Throwable]) - extends MyRPCClient.Handler[F] { + extends MyRPCClient[F] { override def notAllowed(b: Boolean): F[C] = client.notAllowedCompressed(b)