abstract class RPCCompanion[RealRPC] extends AnyRef
Convenience abstract class for companion objects of RPC interfaces. Makes sure all three RPC type classes (AsRawRPC, AsRealRPC and RPCMetadata) are macro-materialized for that RPC interface and confines macro materialization to the same compilation unit where the RPC interface is defined. This is a good practice to avoid incremental compilation problems and duplication of macro-generated code in various callsites. In order to be able to use RPCCompanion, the RPC framework must define FullRPCInfo as a trait or class. Additionally, some special wizardry has been employed to make sure that when an RPC interface is a part of shared (cross-compiled) code of a ScalaJS application then ScalaJS optimizer can remove unused instances of macro generated typeclasses.
object SomeRPCFramework extends StandardRPCFramework { ... } @RPC trait SomeRPC { def doSomething(str: String): Unit def callSomething(int: Int): Future[String] } object SomeRPC extends SomeRPCFramework.RPCCompanion[SomeRPC]
- Alphabetic
- By Inheritance
- RPCCompanion
- AnyRef
- Any
- Hide All
- Show All
- Public
- All
Instance Constructors
- new RPCCompanion()(implicit fri: FullRPCInfo[RealRPC])
Value Members
- implicit macro def asRawRPC: AsRawRPC[RealRPC]
- implicit macro def asRealRPC: AsRealRPC[RealRPC]
- final def fullRpcInfo: FullRPCInfo[RealRPC]
- implicit macro def metadata: RPCMetadata[RealRPC]