@@ -9,18 +9,26 @@ import com.avsystem.commons.serialization.{GenCodec, GenObjectCodec}
99import scala .annotation .compileTimeOnly
1010
1111trait MongoPolyAdtInstances [D [_]] {
12- // needed by MongoAdtFormat.materialize for generic type
13- protected final implicit def codecFromFormat [T : MongoFormat ]: GenCodec [T ] = MongoFormat [T ].codec
14-
1512 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 ]]
1721}
1822
1923abstract class AbstractMongoPolyDataCompanion [Implicits , D [_]](implicits : Implicits )(
20- implicit instances : MacroInstances [Implicits , MongoPolyAdtInstances [D ]]
24+ implicit instances : MacroInstances [Implicits , MongoPolyAdtInstances [D ]],
2125) {
2226 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+ }
2432
2533 implicit def isMongoAdtOrSubtype [C <: D [_]]: IsMongoAdtOrSubtype [C ] = null
2634
@@ -49,5 +57,5 @@ abstract class AbstractMongoPolyDataCompanion[Implicits, D[_]](implicits: Implic
4957 * }}}
5058 */
5159abstract class MongoPolyDataCompanion [D [_]](
52- implicit instances : MacroInstances [BsonGenCodecs .type , MongoPolyAdtInstances [D ]]
60+ implicit instances : MacroInstances [BsonGenCodecs .type , MongoPolyAdtInstances [D ]],
5361) extends AbstractMongoPolyDataCompanion [BsonGenCodecs .type , D ](BsonGenCodecs )
0 commit comments