Создание кодека Mongo для класса с параметрами Scala - PullRequest
1 голос
/ 13 июня 2019

Допустим, у меня есть класс дел:

final case class Question[+A <: AnswerType](title: List[QuestionLocale],
                                            answers: List[A],
                                            id: UUID)

Мне нужно написать кодек монго для Вопроса для каждого типа AnswerType, то есть

final case class MultipleChoiceText(answers: List[String],
                                    correct: Boolean,
                                    id: UUID) extends AnswerType

Макрос Монго Macros.createCodecProviderIgnoreNone[A] не работает для Question[MultipleChoiceText]

Я создал собственный кодек:

class QuestionCodecProvider[A <: AnswerType: ClassTag] extends CodecProvider {

    private val questionct: Class[Question[A]] =
      implicitly[ClassTag[Question[A]]].runtimeClass.asInstanceOf[Class[Question[A]]]


    override def get[T](clazz: Class[T], registry: CodecRegistry): Codec[T] = {
      if (questionct.isAssignableFrom(clazz)) {
        new DocumentCodec(registry).asInstanceOf[Codec[Question[A]]]
      }

      null
    }
  }

В настоящее время возвращается ошибка:

2019-06-13T07:50:16,397Z - ERROR - Can't find a codec for class com.example.
org.bson.codecs.configuration.CodecConfigurationException: Can't find a codec for class com.example.

Любойпомощь будет оценена.

...