Size: a a a

Scala User Group

2020 May 01

AD

Apache DOG™ in Scala User Group
Pavel
т.е если не хочется делать пабсаб, а именно сервистусервис, я бы брал grpc в 2020, а не http. там достаточно много плюшек в виде типизированного апи, перфоманс кому-то может быть важен и еще всякое
грпц ужасное апи для любителей себя помучить
источник

λ

λoλdog in Scala User Group
Не знаю чего там ужасного
источник

P

Pavel in Scala User Group
λoλdog
Не знаю чего там ужасного
ну, типы наверно
источник

λ

λoλdog in Scala User Group
А что с ними не так?
источник
2020 May 02

DM

Daniel Matveev in Scala User Group
λoλdog
А что с ними не так?
А что с ними так?
источник

Y

Yevhen in Scala User Group
а дубями можно токо секуел ранить? а чтото с jdbc конекшина потянуть?
источник

Y

Yevhen in Scala User Group
кароч ето чисто dsl под "select *"
источник

YS

Yaroslav Sushkov in Scala User Group
Daniel Matveev
А что с ними так?
Option повсюду, и с дефолтными значениями боль: отправитель ничего не послал или послал дефолтное значение, на стороне поулчателя оба случая выглядят одинаково.
источник

YS

Yaroslav Sushkov in Scala User Group
что scalaPB что scalaxb примерно одинаковую дичь генерят
источник

YS

Yaroslav Sushkov in Scala User Group
можно попробовать Avro, но там тоже куча приключений с совместимостю схем, schema-registry и т.д.
источник

V

Vλadimir in Scala User Group
Yaroslav Sushkov
можно попробовать Avro, но там тоже куча приключений с совместимостю схем, schema-registry и т.д.
Там хотя бы схема регистри есть
источник

YS

Yaroslav Sushkov in Scala User Group
господа, возник вопрос по шаплесу и котам:

есть 2 сервиса, у каждого свой набор ошибок
type Service1Error = Forbidden :+: NotFound :+: CNil

и
type Service2Error = Forbidden :+: AlreadyDone :+: CNil


и есть их агрегация:
type DomainError = Service1Error :+: Service2Error :+: CNil


Сервису 1 нужен инстанс
MonadError[F, Service1Error]
, второму, соотвественно
MonadError[F, Service2Error]


Собственно хочется вывести инстансы MonadError из одного общего, я сделал это так:
implicit def narrowMonadError[Error <: Coproduct]
 (implicit basis: Basis[DomainError, Error]): MonadError[F, Error] = {
   new MonadError[F, Error] {
     import shapeless.Coproduct._
     override def pure[A](x: A): F[A] = ME.pure(x)
     override def raiseError[A](e: Error): F[A] = ME.raiseError(e.embed)
     // TODO
     override def handleErrorWith[A](fa: F[A])(f: Error => F[A]): F[A] = ???
     override def flatMap[A, B](fa: F[A])(f: A => F[B]): F[B] = ME.flatMap(fa)(f)
     override def tailRecM[A, B](a: A)(f: A => F[Either[A, B]]): F[B] = ME.tailRecM(a)(f)
   }
 }


Проблема заключается во вложенности Corpoduct'ов, при такой структуре, не выводится инстанс
Basis[DomainError, Error]
, чтобы скомпилилось приходится вручную делать flatten для общего типа ошибки:
type DomainErrorFlattended = Forbidden :+: AlreadyDone :+: NotFound :+: CNil



Собственно типов ошибок может быть куча, хотелось бы как-нибудь сделать flatten Coproduct'ов на типах, чтобы для
type DomainError = Service1Error :+: Service2Error :+: CNil
сам выводился
Basis[DomainError, Error]
источник

YS

Yaroslav Sushkov in Scala User Group
есть идеи как это можно сделать?
источник

KS

Kirill Shelopugin in Scala User Group
Yevhen
а дубями можно токо секуел ранить? а чтото с jdbc конекшина потянуть?
Можно все, что угодно
источник

YS

Yaroslav Sushkov in Scala User Group
выглядит так, что нужно вывести из
Basis[DomainError, Error]
Basis[DomainErrorFlattended, Error]
источник

Y

Yevhen in Scala User Group
Kirill Shelopugin
Можно все, что угодно
так ето чисто врапер под jdbc, если тебе чтото в кишках нужно doobie там не нужен
источник

YS

Yaroslav Sushkov in Scala User Group
но у меня стойкое ощущение, что я изобретаю велоспед и это уже должно быть где-то в шаплесе реализовано
источник

Y

Yevhen in Scala User Group
у меня не юзкейс создание конекшина екзекют и обработка resultset
источник

KS

Kirill Shelopugin in Scala User Group
Я не понимаю, что ты пишешь и в чем твой вопрос
источник

Y

Yevhen in Scala User Group
ты из абстракций дуби не вытянешь все то что ты вытянешь из jdbc напрямую
источник