Я пытаюсь реализовать общий шаблон, с помощью которого можно генерировать маршаллеры и unmarshallers для службы HTTP REST от Akka, используя Argonaut, обрабатывая запросы и ответы уровня сущности и коллекции. У меня нет никаких проблем в реализации на уровень предприятия как таковые:Аргонавт: общий метод для кодирования/декодирования массива объектов
case class Foo(foo: String)
object Foo {
implicit val FooJsonCodec = CodecJson.derive[Foo]
implicit val EntityEncodeJson = FooJson.Encoder
implicit val EntityDecodeJson = FooJson.Decoder
}
Я бег в вопросы, которые пытаются обеспечить кодеры и декодеры для следующих целей:
[
{ "foo": "1" },
{ "foo": "2" }
]
Я попытался добавить следующее к моему спутнику :
object Foo {
implicit val FooCollectionJsonCodec = CodecJson.derive[HashSet[Foo]]
}
Однако, я получаю следующее сообщение об ошибке:
Error:(33, 90) value jencode0L is not a member of object argonaut.EncodeJson
Я вижу, что этот метод действительно не существует, но есть ли какой-либо другой общий метод для генерации ожидаемого результата. Я категорически избегаю использования дополнительного класса case для описания коллекции, поскольку я сильно использую отражение в моем случае использования.
На данный момент я даже прекрасно разбираюсь с созданным вручную кодером и декодером, однако я не нашел документацию о том, как его построить с ожидаемой структурой.
Чтобы избежать неприятностей для других в будущем, общее решение не сработало для меня. Я решил перейти к беспроблемному блесну, поскольку он вполне естественно поддерживает создание набора. Я ожидаю второго подхода к работе, однако DSL для Argonaut для пользовательских кодеков довольно обременительна. –
@ cory-p-oncota Я согласен. Ну, я рад, что смогу помочь вам переключиться :) – expert