Skip to content

Commit 5aef78f

Browse files
committed
some helper methods and implicits
1 parent 66fdea9 commit 5aef78f

File tree

3 files changed

+14
-1
lines changed

3 files changed

+14
-1
lines changed

commons-core/src/main/scala/com/avsystem/commons/rpc/AsRawReal.scala

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ object AsReal {
6060

6161
@implicitNotFound("Cannot serialize and deserialize between ${Real} and ${Raw}, appropriate AsRawReal instance not found")
6262
trait AsRawReal[Raw, Real] extends AsReal[Raw, Real] with AsRaw[Raw, Real]
63-
object AsRawReal {
63+
object AsRawReal extends AsRawRealLowPrio {
6464
def apply[Raw, Real](implicit asRawReal: AsRawReal[Raw, Real]): AsRawReal[Raw, Real] = asRawReal
6565

6666
def create[Raw, Real](asRawFun: Real => Raw, asRealFun: Raw => Real): AsRawReal[Raw, Real] =
@@ -81,6 +81,11 @@ object AsRawReal {
8181

8282
def materialize[Raw, Real]: AsRawReal[Raw, Real] = macro macros.rpc.RpcMacros.rpcAsRawReal[Raw, Real]
8383
}
84+
sealed trait AsRawRealLowPrio { this: AsRawReal.type =>
85+
implicit def fromSeparateAsRealAndRaw[Raw, Real](implicit
86+
asRaw: AsRaw[Raw, Real], asReal: AsReal[Raw, Real]
87+
): AsRawReal[Raw, Real] = AsRawReal.create(asRaw.asRaw, asReal.asReal)
88+
}
8489

8590
object RpcMetadata {
8691
def materialize[M[_], Real]: M[Real] = macro macros.rpc.RpcMacros.rpcMetadata[Real]

commons-core/src/main/scala/com/avsystem/commons/rpc/RawRpcCompanion.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ trait RawRpcCompanion[Raw] {
1111
type AsRealRpc[Real] = AsReal[Raw, Real]
1212
type AsRawRealRpc[Real] = AsRawReal[Raw, Real]
1313

14+
def asRealRpc[Real](implicit asReal: AsRealRpc[Real]): AsRealRpc[Real] = asReal
15+
def asRawRpc[Real](implicit asRaw: AsRawRpc[Real]): AsRawRpc[Real] = asRaw
16+
def asRawRealRpc[Real](implicit asRawReal: AsRawRealRpc[Real]): AsRawRealRpc[Real] = asRawReal
17+
1418
def asReal[Real](raw: Raw)(implicit asRealRpc: AsRealRpc[Real]): Real = asRealRpc.asReal(raw)
1519
def asRaw[Real](real: Real)(implicit asRawRpc: AsRawRpc[Real]): Raw = asRawRpc.asRaw(real)
1620

commons-core/src/main/scala/com/avsystem/commons/serialization/GenCodec.scala

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import java.util.UUID
66
import com.avsystem.commons.annotation.explicitGenerics
77
import com.avsystem.commons.derivation.{AllowImplicitMacro, DeferredInstance}
88
import com.avsystem.commons.jiop.JCanBuildFrom
9+
import com.avsystem.commons.meta.Fallback
910
import com.avsystem.commons.misc.MacroGenerated
1011

1112
import scala.annotation.implicitNotFound
@@ -414,6 +415,9 @@ object GenCodec extends RecursiveAutoCodecs with TupleGenCodecs {
414415
allowNull = true
415416
)
416417

418+
implicit def fromFallback[T](implicit fallback: Fallback[GenCodec[T]]): GenCodec[T] =
419+
fallback.value
420+
417421
implicit def macroGeneratedCodec[C, T]: MacroGenerated[C, GenCodec[T]] =
418422
macro macros.serialization.GenCodecMacros.materializeMacroGenerated[T]
419423
}

0 commit comments

Comments
 (0)