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.
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.