Roman
лол, пусть распареллелит xD
АААААААААААААААААААААА
Romɑn
</sarcasm>
Roman
во тьме ночной при свете дня сука бля бля сука бля
Roman
лол, пусть распареллелит xD
нам нужен кластер для сериализации
Roman
80 гигов куча всего, мы же не хотим деньги на ветер спускать
Danil
нам нужен кластер для сериализации
И потом его докер образ в докер образ
Анна
Danil
По крайней мере это можно отрефакторить
Vasily
Карочи
Vasily
Если бы эта ебаная простыня была кодогенеренной
Vasily
Все было бы ок
Vasily
НО
Vasily
Пишут ее руками, судя по всему
Roman
в какой-то степени она кодогенеренная, пушто человек, который ее написал уже нахуй не человек вовсе, это восстание машин какое-то блять
Doge
Это всё равно куча кода, который остается во владении проекта
Roman
По крайней мере это можно отрефакторить
let readJson (x: Json) : Result<Delta, _> = checkResults() { let! cpc_id = x |> toOptStrSan "cpc_id" let! process_id = x |> toOptStrSan "process_id" let! process_name = x |> toOptStrSan "process_name" let! country = x |> toOptObj "country" Country.FromJson let! currency = x |> toOptObj "currency" Currency.FromJson let! employee_email = x |> toOptObj "employee_email" Email.FromJson let! employee_name = x |> toOptStrSan "employee_name" let! client_id = x |> toOptStrSan "client_id" let! client_name = x |> toOptStrSan "client_name" let! process_type = x |> toOptObj "process_type" ProcessType.FromJson let! intOption = toOptObj "negotiated_payment_terms" Int32.FromJson x let! negotiatedPaymentTerms = tryCreateNegotiatedPaymentTermsOption intOption return { cpc_id = cpc_id process_id = process_id process_name = process_name country = country currency = currency employee_email = employee_email employee_name = employee_name client_id = client_id client_name = client_name process_type = process_type negotiated_payment_terms = negotiatedPaymentTerms } } На вот, рефактори такое. Для каждого ебаного типа
Doge
похоже на то.
Красиво. Я надеюсь там хотя бы что-то вроде MyType <*> intDecoder <$> stringDecoder
Doge
А, нет, всё хуже
Doge
Надо было хотя бы аппликативный декодер сделать.
Roman
не надо
Doge
Можно было хотя бы в одну строчку эту байду написать
Vasily
Да выкинуть к хуям
Roman
тут и так все измазанно этим фшарп плюсом с попытками хаскелизма
Vasily
На том же TypeShape и то красивее будет
Анна
ажтрясёт
Doge
Да выкинуть к хуям
Это понятно, но уж если человек упертый, то можно попробовать хотя бы облегчить страдания
Roman
это действительно адо выкинуть к хуям. Благо, чувак созрел до изгнания хирона
Vasily
У вас же не мобилки, берите utf8json
Roman
У вас же не мобилки, берите utf8json
я попытаюсь пропихнуть его. Там же нет нужды в этих ебучих static member FromJson?
Vladislav
А
Vladislav
Понял
Vladislav
Vladislav
Бог дал атрибуты и сериализотры через рефлексию и не только
Vladislav
Но нет
Doge
я попытаюсь пропихнуть его. Там же нет нужды в этих ебучих static member FromJson?
Кстати, а ваш любитель хаскеля на самом хаскеле вообще писал?
Андрей
вроде да. Но не в продакшн
он там небость тоже все тайпклассы вручную прописывал, чтоб потом легко рефакторить, лол
Roman
ой у меня уже аллергия на слово тайпклассы.
Roman
Чувак постоянно жалуется, что система типов фшарп слишком слаба и как ему не хватает тайпклассов
Doge
(Если ещё deriving есть)
Roman
Ну вот этого бойлерплейта не было бы.
от такого бойлерплейта надо не тайпклассами избавляться, а здравым умом, имхо
Doge
Но с другой стороны, раз уже их нету, надо смотреть как это идиоматично делать с теми средствами, что есть
Roman
я боюсь, что наличие тайпклассов позволило бы этому безумию прогрессировать дольше
Doge
я боюсь, что наличие тайпклассов позволило бы этому безумию прогрессировать дольше
Его бы просто не было бы, т.к. был бы везде deriving инстансов для ToJson, FromJson
Roman
Его бы просто не было бы, т.к. был бы везде deriving инстансов для ToJson, FromJson
но реализацию этих методов же пришлось бы так же писать, не?
Doge
но реализацию этих методов же пришлось бы так же писать, не?
Нет, они автоматом бы через deriving вывелись
Roman
как, если хирон заставляет тебя руками сериализовывать?
Doge
Cм. aeson в хаскель, serde в rust или circe в scala
Roman
с ручным наименованием полей
Igor
от такого бойлерплейта надо не тайпклассами избавляться, а здравым умом, имхо
А нельзя просто заюзать новый JSON парсер из .net кора? Он вроде и на рефлексии, но супер бытсрый.
Roman
Roman
Я конечно косьтми лягу, чтобы больше такой хуйней не заниматься, но могу все равно проиграть эту битву
Doge
как, если хирон заставляет тебя руками сериализовывать?
Это уже зависит от конкретного языка, но общая идея в том, что есть какой-то механизм в языке, который позволяет подобное организовать. (В расте или иногда в скале - это макросы или TLP, в хаскеле - Generic и т.д.)
Igor
НЕТ
почему
Igor
Vladislav
почему
Не кошерно
Doge
В скале и хаскеле общая идея в том, что любой АТД можно представить как набор произведений (таплов) и копроизведения (either с n вариантами). Далее мы определяем как будет выглядить наш тайпкласс для произведения и копроизведения, и дальше машинерия языка или макросов любой тип в такое представление сама раскладывает и вызывает эти тайплкассы.
Igor
ну мы собираемся выкинуть хирон. Но этот чел заикался про Fleece
Чет это такое и как это связано с новым json сериалайзером
Doge
С кастомными именованиями (не совпадающими с названиями в структуре) полей тут по разному бывает, но в любом языке можно такое поддержать. (может потребоваться TLP или макросы, да)
Doge
Без необходимости в ручном определении парсеров
Roman
С кастомными именованиями (не совпадающими с названиями в структуре) полей тут по разному бывает, но в любом языке можно такое поддержать. (может потребоваться TLP или макросы, да)
ну короче как я понял, проблема в том, что чувак заюзал кальку технологий языков с более продвинутым метапрограммированием, которого нет у нас, но и не стал даже пользоваться нашими средствами метапрограммирования и все хуячит вручную
Roman
не знаю, стало ли мне легче