Wrap your implicit instance of AsReal, AsRaw, AsRawReal or RPC metadata (with companion that extends
RpcMetadataCompanion into Fallback
in order to lower its implicit priority.
Wrap your implicit instance of AsReal, AsRaw, AsRawReal or RPC metadata (with companion that extends
RpcMetadataCompanion into Fallback
in order to lower its implicit priority.
Useful when some implicit must be imported but we don't want it to get higher priority that imports normally
have over implicit scope (e.g. implicits from companion objects).
NOTE: Fallback
does not work for *all* typeclasses, only RPC-related ones (AsReal
, AsRaw
, etc).
You can make it work with your own typeclass, but you must define appropriate forwarder in its companion, e.g.
trait FallbackAwareTC[T] { ... } object FallbackAwareTC { implicit def fromFallback[T](implicit f: Fallback[FallbackAwareTC[T]]): FallbackAwareTC[T] = f.value }
Mix in this trait into your RPC framework to support remote functions, i.e.
Mix in this trait into your RPC framework to support remote functions, i.e. methods which asynchronously
return some result (Future[A]
where A
has a Reader
and Writer
).
Mix in this trait into your RPC framework to support getters, i.e.
Mix in this trait into your RPC framework to support getters, i.e. methods that return RPC subinterfaces
Mix in this trait into your RPC framework to support remote procedures, i.e.
Mix in this trait into your RPC framework to support remote procedures, i.e. fire-and-forget methods
with Unit
return type.
Base trait for companion objects of raw RPC traits.
Intermediate factory that creates an InstancesTrait
for given Real
RPC trait, based on provided Implicits
.
Intermediate factory that creates an InstancesTrait
for given Real
RPC trait, based on provided Implicits
.
Normally, this factory is used as implicit constructor parameter of base classes for companion objects
of RPC traits (e.g. DefaultRestApiCompanion).
This all serves to reduce boilerplate associated with RPC trait companion declarations and makes RPC trait
definitions as concise as possible. It also lets the programmer easily inject additional implicits into
macro-materialization of RPC-related typeclasses (AsReal
, AsRaw
, metadata, etc.).
An InstancesTrait
is a trait that aggregates multiple RPC related typeclass instances for given Real
RPC trait.
There is no fixed interface for InstancesTrait
, its members are inspected by materialize
macro and implemented
automatically. InstancesTrait
must contain only parameterless abstract methods that return either
AsRaw[Raw,Real]
, AsReal[Raw,Real]
, AsRawReal[Raw,Real]
or some RPC metadata class for Real
.
The Raw
type is arbitrary and may be different for every method. However, it must be a concrete raw RPC trait
so that it's further understood by the macro engine. All methods of the InstancesTrait
are macro-implemented
using AsRaw/AsReal/AsRawReal/RpcMetadata.materializeForRpc
macros.
Example of InstancesTrait
: ClientInstances
The Implicits
type is typically a trait with a collection of implicit definitions whose companion object
implements that trait, e.g. DefaultRestImplicits.
When the macro implements apply
method of RpcMacroInstances
contents of Implicits
are imported into the
body of apply
and visible further by macros that materialize InstancesTrait
.
If RpcMacroInstances
is accepted as implicit super constructor parameter of a companion object
(which is the typical situation) then this
reference should be passed as companion
.
This is in order to work around https://github.com/scala/bug/issues/7666