169 похожих чатов

Спасибо. По типизации структур. TLDR: как типизировать поле в defstruct,

чтобы оно было Array<OtherStruct>?

Минимальный пример. Есть такая структура:

defmodule Users.Model.UsersRequest do
defstruct [
filters: nil,
sort: [],
pagination: %Users.Model.Pagination{},
]

def validate(data) do
result = validateSomehow(data)
case result do
{:error, error_body} -> {:error, error_body}
:ok -> {:ok, struct(__MODULE__, data)}
end
end
end

defmodule Users.Model.Pagination do
defstruct [
page: nil,
rowsPerPage: nil,
]
end

defmodule Users.Model.Sort do
defstruct [
field: nil,
direction: nil,
]
end

Вот в этой красоте как типизировать поле sort структуры Users.Model.UsersRequest, чтобы после struct(__MODULE__, data) его значение было типа Array<Sort>, если говорить джавовской нотацией?

9 ответов

18 просмотров

использование типов https://hexdocs.pm/elixir/typespecs.html

а вот эта штука, например, есть инструмент проверки типов https://github.com/jeremyjh/dialyxir

G-K Автор вопроса
Deconstructor
использование типов https://hexdocs.pm/elixir/type...

Правильно понимаю, что мой кейс будет чем-то таким? @type sort() :: array(Sort.t())

Правильный ответ на этот вопрос: Не нужно проверять этот тип, нужно писать тесты. Желательно с фаззингом на StreamData, если есть подозрение того что что-то может пойти не так

Lama Lover
Правильный ответ на этот вопрос: Не нужно проверят...

вообще да), зря писали эту простыню, тут валидация на структуру нафиг не нужна

Deconstructor
вообще да), зря писали эту простыню, тут валидация...

если возразить будет другая простыня, так что все равно

G-K Автор вопроса
Deconstructor
вообще да), зря писали эту простыню, тут валидация...

Ничего не зря! Очень полезно было. Для вас эта дискуссия тривиальная, а для бывшего ортодоксального джависта она очень ценная. Спасибо!

G K
Ничего не зря! Очень полезно было. Для вас эта дис...

Ортодоксальный джавист должен уметь жить с непараметризованными коллекциями.

Aleksey @cheatex
Ортодоксальный джавист должен уметь жить с непарам...

с тех пор как добавили дженерики уже выросло не одно поколение программистов

Похожие вопросы

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Ребят в СИ можно реализовать ООП?
Николай
33
у вас два процесса. один посылает другому сигнал. у вас есть код обоих процессов? если всё не так - расскажите как оно на самом деле. а именно кто кому чего, есть-ли консоли,...
Karagy
6
вы делали что-то подобное и как? может есть либы готовые? увидел картинку нокода, где всё линиями соединено и стало интересно попробовать то же в ddl на lua сделать. решил с ч...
Victor
8
Карта сайта