Skip to content

Commit ee60277

Browse files
authored
airframe-grpc: Fix syntax for Scala 3 (#2193)
* airframe-grpc: Fix syntax for Scala 3 * Mark remaining tasks as TODO
1 parent 1b94fa6 commit ee60277

File tree

12 files changed

+38
-21
lines changed

12 files changed

+38
-21
lines changed

airframe-di/src/main/scala-3/wvlet/airframe/package.scala

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,7 @@ package object airframe {
3737
def newSilentDesign: Design = newDesign.noLifeCycleLogging
3838

3939
import scala.jdk.CollectionConverters._
40+
4041
// This will not be used in Scala 3, but left for the compatibility with Scala 2
4142
val traitFactoryCache = new ConcurrentHashMap[Surface, Session => Any].asScala
4243
def getOrElseUpdateTraitFactoryCache(s: Surface, factory: Session => Any): Session => Any = {

airframe-http-grpc/src/main/scala/wvlet/airframe/http/grpc/GrpcServer.scala

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ case class GrpcServerConfig(
3838
executorProvider: GrpcServerConfig => ExecutorService = GrpcServer.newAsyncExecutorFactory,
3939
maxThreads: Int = (Runtime.getRuntime.availableProcessors() * 2).max(2),
4040
codecFactory: MessageCodecFactory = MessageCodecFactory.defaultFactoryForMapOutput,
41-
requestLoggerProvider: GrpcServerConfig => GrpcRequestLogger = { config: GrpcServerConfig =>
41+
requestLoggerProvider: GrpcServerConfig => GrpcRequestLogger = { (config: GrpcServerConfig) =>
4242
GrpcRequestLogger
4343
.newLogger(config.name)
4444
}
@@ -85,7 +85,9 @@ case class GrpcServerConfig(
8585
def withRequestLoggerProvider(provider: GrpcServerConfig => GrpcRequestLogger) = this
8686
.copy(requestLoggerProvider = provider)
8787
// Disable RPC logging
88-
def noRequestLogging = this.copy(requestLoggerProvider = { config: GrpcServerConfig => GrpcRequestLogger.nullLogger })
88+
def noRequestLogging = this.copy(requestLoggerProvider = { (config: GrpcServerConfig) =>
89+
GrpcRequestLogger.nullLogger
90+
})
8991

9092
/**
9193
* Create and start a new server based on this config.
@@ -123,7 +125,7 @@ case class GrpcServerConfig(
123125
*/
124126
def designWithChannel: Design = {
125127
design
126-
.bind[Channel].toProvider { server: GrpcServer =>
128+
.bind[Channel].toProvider { (server: GrpcServer) =>
127129
ManagedChannelBuilder.forTarget(server.localAddress).usePlaintext().build()
128130
}
129131
.onShutdown {

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/GrpcClientTest.scala

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,11 @@ import wvlet.airframe.rx.Rx
2323
import wvlet.airspec.AirSpec
2424
import wvlet.log.{LogSupport, Logger}
2525

26-
import scala.concurrent.Promise
26+
import scala.concurrent.{ExecutionContext, Promise}
2727

2828
class GrpcClientTest extends AirSpec {
2929

30-
// TODO Use AirSpec's defaultExecutionContext
31-
private implicit val sc = scala.concurrent.ExecutionContext.global
30+
private implicit val sc: ExecutionContext = defaultExecutionContext
3231

3332
override def design: Design = DemoApiV2.design
3433

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/GrpcContextTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ object GrpcContextTest extends AirSpec {
2222

2323
override protected def design: Design = DemoApi.design
2424

25-
test("get context") { client: DemoApiClient =>
25+
test("get context") { (client: DemoApiClient) =>
2626
val ret = client.getContext
2727
info(ret)
2828
client.getContext

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/GrpcErrorLogTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ object GrpcErrorLogTest extends AirSpec {
4747
gRPC.server
4848
.withName("demo-api-debug")
4949
.withRouter(Router.add[DemoApiDebug])
50-
.withRequestLoggerProvider { config: GrpcServerConfig =>
50+
.withRequestLoggerProvider { (config: GrpcServerConfig) =>
5151
GrpcRequestLogger
5252
.newLogger(config.name, inMemoryLogWriter)
5353
}
@@ -64,7 +64,7 @@ object GrpcErrorLogTest extends AirSpec {
6464
inMemoryLogWriter.getLogs
6565
}
6666

67-
test("request logger test") { client: DemoApiClient =>
67+
test("request logger test") { (client: DemoApiClient) =>
6868
test("unary method error log") {
6969
val logs = captureAll {
7070
client.hello("gRPC")

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/GrpcJsonTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class GrpcJsonTest extends AirSpec {
2727

2828
protected override def design = gRPC.server.withRouter(router).designWithChannel
2929

30-
test("json encoding") { c: DemoApiClient =>
30+
test("json encoding") { (c: DemoApiClient) =>
3131
val client = c.withEncoding(RPCEncoding.JSON)
3232

3333
test("unary") {

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/GrpcRequestLoggerTest.scala

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class GrpcRequestLoggerTest extends AirSpec {
3333
gRPC.server
3434
.withName("demo-api")
3535
.withRouter(DemoApi.router)
36-
.withRequestLoggerProvider { config: GrpcServerConfig =>
36+
.withRequestLoggerProvider { (config: GrpcServerConfig) =>
3737
GrpcRequestLogger.newLogger(config.name, inMemoryLogWriter)
3838
}
3939
.designWithChannel
@@ -45,7 +45,7 @@ class GrpcRequestLoggerTest extends AirSpec {
4545
inMemoryLogWriter.getLogs
4646
}
4747

48-
test("request logger test") { client: DemoApiClient =>
48+
test("request logger test") { (client: DemoApiClient) =>
4949
test("unary method log") {
5050
val logs = captureAll {
5151
client.hello("gRPC")

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/GrpcServerFactoryTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ object GrpcServerFactoryTest extends AirSpec {
2121

2222
private val r = Router.add[Greeter]
2323

24-
test("Build multiple gRPC servers") { f: GrpcServerFactory =>
24+
test("Build multiple gRPC servers") { (f: GrpcServerFactory) =>
2525
val s1 = f.newServer(gRPC.server.withName("grpc1").withRouter(r))
2626
val s2 = f.newServer(gRPC.server.withName("grpc2").withRouter(r))
2727
}

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/GrpcStreamingTest.scala

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,14 @@ import wvlet.airspec.AirSpec
2323
*/
2424
object GrpcStreamingTest extends AirSpec {
2525

26-
private def router = Router.add[DemoApi]
27-
debug(router)
28-
29-
protected override def design = gRPC.server.withRouter(router).designWithChannel
26+
private lazy val router: Router = Router.add[DemoApi]
27+
protected override def design = {
28+
gRPC.server.withRouter(router).designWithChannel
29+
}
3030

3131
// launching a gRPC server first
32-
test("Launch a standalone gRPC server") { server: GrpcServer =>
33-
test("Test gRPC client methods") { stub: DemoApiClient =>
32+
test("Launch a standalone gRPC server") { (server: GrpcServer) =>
33+
test("Test gRPC client methods") { (stub: DemoApiClient) =>
3434
val N = 10
3535

3636
test("unary") {

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/GrpcTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ object GrpcTest extends AirSpec {
8989
info(s"Shutting down gRPC server localhost:${port}")
9090
server.shutdownNow()
9191
}
92-
.bind[ManagedChannel].toProvider { server: Server =>
92+
.bind[ManagedChannel].toProvider { (server: Server) =>
9393
ManagedChannelBuilder.forTarget(s"localhost:${server.getPort}").usePlaintext().build()
9494
}
9595
.onShutdown { channel =>

airframe-http-grpc/src/test/scala/wvlet/airframe/http/grpc/example/DemoApi.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ object DemoApi {
9494
.withRouter(router)
9595
.withName("DemoApi")
9696
.designWithChannel
97-
.bind[DemoApiClient].toProvider { channel: Channel => new DemoApiClient(channel) }
97+
.bind[DemoApiClient].toProvider { (channel: Channel) => new DemoApiClient(channel) }
9898

9999
val router = Router.add[DemoApi]
100100

airframe-http-router/src/main/scala-3/wvlet/airframe/http/router/RouterBase.scala

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,11 @@ package wvlet.airframe.http.router
1616
import wvlet.airframe.http.Router
1717
import wvlet.airframe.http.HttpFilterType
1818
import wvlet.airframe.surface.Surface
19+
import wvlet.airframe.Session
1920

2021
trait RouterBase { self: Router =>
2122
inline def add[Controller]: Router = {
23+
// TODO registerTraitFactory
2224
self.addInternal(Surface.of[Controller], Surface.methodsOf[Controller])
2325
}
2426

@@ -41,9 +43,22 @@ private[router] object RouterObjectMacros {
4143
import quotes.reflect._
4244

4345
if (TypeRepr.of[Controller] <:< TypeRepr.of[HttpFilterType]) {
46+
// TODO registerTraitFactory
4447
'{ Router(filterSurface = Some(Surface.of[Controller])) }
4548
} else {
49+
// TODO registerTraitFactory
4650
'{ Router.empty.add[Controller] }
4751
}
4852
}
53+
54+
// def registerTraitFactory[T: Type](using quotes: Quotes): Expr[Unit] = {
55+
// // TODO implement simlar thing method like AirframeMacros.shouldGenerateTrait
56+
// // TODO instantiate an arbitrary trait https://github.com/lampepfl/dotty/issues/11685
57+
// val t = Type.of[T].info
58+
// '{ wvlet.airframe.getOrElseUpdateTraitFactoryCache(
59+
// Surface.of[T],
60+
// { (ss: Session) => (new ${t} {}).asInstanceOf[Any] }
61+
// )
62+
// }
63+
// }
4964
}

0 commit comments

Comments
 (0)