我正在努力获取 Scala3 宏实现中的类型信息。我将通过代码来解释问题。
应用逻辑如下:
object BlockServiceImpl extends BlockService:
def authenticateUser0() = new ServiceCall[AuthUser,AuthUserResponse]:
def invoke(request: AuthUser): Future[AuthUserResponse] =
println("BlockServiceImpl authenticateUser0 called")
Future.successful(AuthUserResponse("test"))
现在,对于逻辑,我想在宏的帮助下创建端点。
defineRoute("POST","/v1/block",BlockServiceImpl.authenticateUser0)
这是内联方法:
inline def defineRoute[Q: RootJsonFormat ,R: RootJsonFormat](method: String, uri: String,inline call: () => ServiceCall[Q,R]): AkkaHttpCall = ${ methodImpl[Q,R]('uri, 'call)}
这是宏的实现:
def methodImpl[Q: Type,R: Type](uri: Expr[String],expr: Expr[Function0[ServiceCall[Q,R]]])(using ctx: Quotes): Expr[AkkaHttpCall] = ...
我怎样才能得到这样的信息Q
is AuthUser
编译时宏扩展期间的类型?