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