Size: a a a

2020 December 25

AB

Alex Bubnov in pro.elixir
ну, я вижу профит в более простой реализации. мне не нужно через рефлексию куда-то лезть, пытаться понять, что написал программист, он сразу описывает схему в легко доступных данных, и в терминах, которые предоставляет библиотека.
источник

LL

Lama Lover in pro.elixir
Кароче да, это заметно что в языке не хватает абстракций для описания типизированных структур данных
Есть спеки для диалайзера, есть Ecto.Schema, есть typed_struct, есть OpenApiSpex
И в каждом из них нужно каждый раз описывать структуру данных
источник

ML

Maksim Lapshin in pro.elixir
У нас очень хорошо пошла схема с перетаскиванием тайпспеков в рантайм
источник

LL

Lama Lover in pro.elixir
Maksim Lapshin
У нас очень хорошо пошла схема с перетаскиванием тайпспеков в рантайм
Зачем?
источник

AN

Alexey Novoselov in pro.elixir
Lama Lover
Можно даже попробовать генерить спеки из Ecto.Schema
@type t() :: %__Module__{} недостаточно? Для Shema
источник

ML

Maksim Lapshin in pro.elixir
Lama Lover
Зачем?
Валидируем ввод, формируем генератор типов для вывода и тп
источник

LL

Lama Lover in pro.elixir
Alexey Novoselov
@type t() :: %__Module__{} недостаточно? Для Shema
Недостаточно, ты же не знаешь конкретные типы полей
источник

AB

Alex Bubnov in pro.elixir
Alex Bubnov
ну, я вижу профит в более простой реализации. мне не нужно через рефлексию куда-то лезть, пытаться понять, что написал программист, он сразу описывает схему в легко доступных данных, и в терминах, которые предоставляет библиотека.
если ориентироваться на опенапи, можно сразу предоставить терминологию, с ним совместимую, чтобы не было как в swaggerfox спринговом, где они безуспешно пытались аннотации javax.validation со спринговыми расширениями транслировать в опенапи спеку. получалось отвратительно, конечно.
источник

LL

Lama Lover in pro.elixir
Maksim Lapshin
Валидируем ввод, формируем генератор типов для вывода и тп
А как валидируете? Используете опенсорсные валидаторы?

Вон для elixir есть edantic
Я писал свой когда-то
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Кароче да, это заметно что в языке не хватает абстракций для описания типизированных структур данных
Есть спеки для диалайзера, есть Ecto.Schema, есть typed_struct, есть OpenApiSpex
И в каждом из них нужно каждый раз описывать структуру данных
зачем? тебе же не типы нужны, а схема данных.
источник

AB

Alex Bubnov in pro.elixir
ее умеет экто, ее (довольно мерзко) умеет OpenApiSpex.
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
зачем? тебе же не типы нужны, а схема данных.
Ну дак хотелось бы иметь типизированные схемы, чтобы поле id всегда было pos_integer, а username всегда был строкой
И чтобы это не нужно было описывать один раз в @type t ::, потом ещё раз в Ecto.Schema, а потом ещё раз и в OpenApiSpex
источник

AB

Alex Bubnov in pro.elixir
да зачем тебе @type-то?
источник

LL

Lama Lover in pro.elixir
И это возможно, нужно только этим заняться
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
да зачем тебе @type-то?
Для документации, для диалайзера (он всё-таки хоть как-то, но помогает), просто чтобы разработчикам было в коде понятно
источник

AB

Alex Bubnov in pro.elixir
если у тебя есть опенапи-спека и схема экто, и тебе этого много - сгенери одно из другого
источник

AB

Alex Bubnov in pro.elixir
(хотя это неправильная идея, конечно)
источник

AB

Alex Bubnov in pro.elixir
если тебе так хочется типы - напили макросов, которые из декларации схемы нагенерят @type
источник

AB

Alex Bubnov in pro.elixir
но не надо делать наоборот, ни в коем случае.
источник

AN

Alexey Novoselov in pro.elixir
Lama Lover
Недостаточно, ты же не знаешь конкретные типы полей
в 1.11 эликсире вроде компилятор уже умеет валидировать структуры и Экто.Схемы тоже, т.к. они макросом в структуру раскладываются
источник