@@ -9,18 +9,26 @@ import com.avsystem.commons.serialization.{GenCodec, GenObjectCodec}
9
9
import scala .annotation .compileTimeOnly
10
10
11
11
trait MongoPolyAdtInstances [D [_]] {
12
- // needed by MongoAdtFormat.materialize for generic type
13
- protected final implicit def codecFromFormat [T : MongoFormat ]: GenCodec [T ] = MongoFormat [T ].codec
14
-
15
12
def codec [T : GenCodec ]: GenObjectCodec [D [T ]]
16
- def format [T : MongoFormat ]: MongoAdtFormat [D [T ]]
13
+
14
+ /**
15
+ * We need to accept an implicit `GenCodec[T]` because materialization of
16
+ * [[MongoAdtFormat ]] requires a [[GenObjectCodec ]] ([[MongoAdtFormat.codec ]]). In practice, it can be derived
17
+ * from the `MongoFormat[T]` that is already accepted by this method but we have to be careful about priority of
18
+ * implicits. Because of that, this implicit is actually provided by [[AbstractMongoPolyDataCompanion.format ]].
19
+ */
20
+ def format [T : MongoFormat : GenCodec ]: MongoAdtFormat [D [T ]]
17
21
}
18
22
19
23
abstract class AbstractMongoPolyDataCompanion [Implicits , D [_]](implicits : Implicits )(
20
- implicit instances : MacroInstances [Implicits , MongoPolyAdtInstances [D ]]
24
+ implicit instances : MacroInstances [Implicits , MongoPolyAdtInstances [D ]],
21
25
) {
22
26
implicit def codec [T : GenCodec ]: GenObjectCodec [D [T ]] = instances(implicits, this ).codec[T ]
23
- implicit def format [T : MongoFormat ]: MongoAdtFormat [D [T ]] = instances(implicits, this ).format[T ]
27
+
28
+ implicit def format [T : MongoFormat ]: MongoAdtFormat [D [T ]] = {
29
+ implicit def tCodec : GenCodec [T ] = MongoFormat [T ].codec
30
+ instances(implicits, this ).format[T ]
31
+ }
24
32
25
33
implicit def isMongoAdtOrSubtype [C <: D [_]]: IsMongoAdtOrSubtype [C ] = null
26
34
@@ -49,5 +57,5 @@ abstract class AbstractMongoPolyDataCompanion[Implicits, D[_]](implicits: Implic
49
57
* }}}
50
58
*/
51
59
abstract class MongoPolyDataCompanion [D [_]](
52
- implicit instances : MacroInstances [BsonGenCodecs .type , MongoPolyAdtInstances [D ]]
60
+ implicit instances : MacroInstances [BsonGenCodecs .type , MongoPolyAdtInstances [D ]],
53
61
) extends AbstractMongoPolyDataCompanion [BsonGenCodecs .type , D ](BsonGenCodecs )
0 commit comments