Объединение реестров кодеков mongodb в scala - PullRequest
0 голосов
/ 28 сентября 2018

У меня есть две реализации CodecRegistry для набора классов дел.Большинство из них созданы с помощью макросов.Теперь, если я использую только RegistryOne, он работает для набора "Один" - классы из пакета one.

object RegistryOne {
  lazy val registry: CodecRegistry =
    fromRegistries(
      fromCodecs(..),
      fromProviders(..),
      DEFAULT_CODEC_REGISTRY
    )
}

object RegistryTwo {
  lazy val registry: CodecRegistry =
    fromRegistries(
      fromCodecs(..),
      fromProviders(..),
      RegistryOne.registry,
      DEFAULT_CODEC_REGISTRY
    )
}

Некоторые из классов, реализованных в RegistryTwo, зависят от пакета one,Поэтому я просто включил RegistryOne в него.Теперь вся сериализация по-прежнему работает с RegistryTwo.registry для набора «Один».Но для классов пакета two я получаю исключения времени выполнения "Не могу найти кодек для класса scala.Option".Похоже, DEFAULT_CODEC_REGISTRY не входит в приведенный реестр?!

У меня также RegistryThree и RegistryFour.По крайней мере, для ясности и для будущих рефакторингов я бы держал их отдельно.

Как правильно объединить реестры кодеков?

1 Ответ

0 голосов
/ 28 сентября 2018

Оказывается, сообщение об ошибке вводит в заблуждение.Макрос для основного класса ADT также создает кодеки для каждого подкласса.Если вы также добавите созданный макросом кодек для одного из них, то реестр будет сбит с толку и не сможет десериализовать примитивы типа scala.Option.

...