juan_gandhi: (Default)
Juan-Carlos Gandhi ([personal profile] juan_gandhi) wrote2019-10-21 08:00 pm
Entry tags:

программируя на скале

Сегодня трахался с одной фигней. И вот код ходит куда-то на сервер, а приносит в ответ "неправильный json". Шо за json, я ничего такого не посылаю. А ошибка приходит. Стал изучать вопрос. А чо он неправильный, а там http4s берет какой-то Message[T], пытается из него сделать ByteBuffer, и обламывется, т.к. ByteBuffer оказывается пустой. Из чего он делается - Message состоит из каких-то Fragments; и вот один фрагмент пустой.

Что за фрагмент, чо он пустой, непонятно, но внутри его сидит SingleChunk, в котором сидит Chunk, и про него известно, что он пустой. Ну окей, ну покажите мне, что было-то. А не показывают. Там, конечно, цикл, но цикл навалян через рекурсию (типа так круче), а рекурсия оптимизирована через трамплин. В результате стектрейса нету, промежуточные данные не видны, Message не виден, потому что это макрос. А откуда вызвали, тоже непонятно, потому что трамплин, и весь стектрейс проебан.

И вот каким-то чудесным образом я где-то замечаю, что сервер-то послал HTTP 400. Ну правильно. И, конечно, в таком случае никакого джейсона. Но http4s на это все кладет с высокой колокольни, и начинает "парсить джейсон".

Ну на эту тему даже тест есть. Только этот тест не ловит HTTP 400, а ловит ошибку. Ага, ошибка! Ура. 

Такие дела.
 

А внутри cats, свободные монады, IO монада, завернутая в EitherT. 

А смысл?! Если HTTP 400 вы не ловите.

Что-то после раста все это смешно выглядит.

 

[personal profile] sassa_nf 2019-10-22 05:51 am (UTC)(link)
HTTP 400 is allowed to have a body, and content-type is allowed to declare it a application/json.
xacid: (Default)

[personal profile] xacid 2019-10-22 06:38 am (UTC)(link)
особенно "хороша" здесь ио монада - за что боролись на то и напоролись ... :)
sab123: (Default)

[personal profile] sab123 2019-10-22 05:31 pm (UTC)(link)
А я, между прочим, давно говорил про все эти монады-рекурсии и удобство отладки.

Непонятно только, что, неужто на Расте нельзя взять пустой буфер?
yucca: (Default)

[personal profile] yucca 2019-10-22 05:40 pm (UTC)(link)
А я на днях некоторое время пыталась понять, почему на совершенно невинную просьбу сохранить текст сервер мне выдает 500 Internal Server Error, который в логах никак не отражается. Оказалось, там у ModSecurity такое правило - считать подозрительными все строчки, в которых фигурирует update, set и =, независимо от того, что между ними.

[personal profile] caztd 2019-10-22 06:29 pm (UTC)(link)
> Что-то после раста все это смешно выглядит.
Эээ.. так и до плюсов докатиться можно ;)

[personal profile] plovski 2019-10-23 03:41 pm (UTC)(link)
> А внутри cats, свободные монады, IO монада, завернутая в EitherT.

А вам уже говорили, что когда ваши труды по пропихиванию монадушек в массы увенчаются успехом - массы вам такое небо с овчинку functional style устроят, что вы проклянете тот день когда впервые услышали о монаде?

Ну так вот вам первые ласточки, enjoy.