Size: a a a

2020 June 22

MZ

Max Zhuravkov in Rust Async
или в tokio_util есть уже готовая наработка, которая позволяет создавать цепочки Encoder/Decoder?
источник

Ct

Casual tears in Rust Async
Кодеки в токио не композятся
источник

Ct

Casual tears in Rust Async
Там кодек это способ сконвертить AsyncRead в Stream или AsyncWrite в Sink
источник

MZ

Max Zhuravkov in Rust Async
Т.е. если хочу что-то объединить в цепочку нужно из строить цепочку из AsyncRead/AsyncWrite?
источник

Ct

Casual tears in Rust Async
Скорее из Stream/Sink. У них комбинаторы есть чтобы это делать.
источник

MZ

Max Zhuravkov in Rust Async
И вопрос по моему примеру - он как бы работает ( но работает случайно тк тестировалось на loopback) и так делать в tokio нельзя ?
источник

ph

pl 🦑 hk in Rust Async
не вижу ни одной причины, почему оно не должно работать
источник

MZ

Max Zhuravkov in Rust Async
pl 🦑 hk
не вижу ни одной причины, почему оно не должно работать
Спасибо
источник

AI

Alex Ilizarov in Rust Async
Max Zhuravkov
И вопрос по моему примеру - он как бы работает ( но работает случайно тк тестировалось на loopback) и так делать в tokio нельзя ?
Совет в догонку, при разработке кодеков очень удобно разрабатывать их в тесте
источник

AI

Alex Ilizarov in Rust Async
Max Zhuravkov
И вопрос по моему примеру - он как бы работает ( но работает случайно тк тестировалось на loopback) и так делать в tokio нельзя ?
Т.е. пишешь заготовку теста, инстанцируешь кодек, подаешь ему ожидаемый инпут и дальше пишешь содержимое кодека дебажа через dbg!
Главное проверять правильный Result<Option>, пустые значения, неправильно сформированные значения и тогда ты просто используешь кодек и он просто работает. Очень удобно.

А уж откуда ты там посылаешь данные кодеку все равно, он сугубо энкодит/декодит поток байт
источник

MZ

Max Zhuravkov in Rust Async
Alex Ilizarov
Т.е. пишешь заготовку теста, инстанцируешь кодек, подаешь ему ожидаемый инпут и дальше пишешь содержимое кодека дебажа через dbg!
Главное проверять правильный Result<Option>, пустые значения, неправильно сформированные значения и тогда ты просто используешь кодек и он просто работает. Очень удобно.

А уж откуда ты там посылаешь данные кодеку все равно, он сугубо энкодит/декодит поток байт
Спасибо - потом так и буду делать  (благо опыта написания такого кода хоть и не на rust достаточно) а сейчас хочу разобраться как по феншую в tokio все делает 🙂
источник

MZ

Max Zhuravkov in Rust Async
Casual tears
Скорее из Stream/Sink. У них комбинаторы есть чтобы это делать.
Вот нашел такой пример от repo одного из авторов tokio вроде бы - https://github.com/carllerche/tokio-serde-json/blob/5c3f36bfc6693ed3bc953d6487260d1f58ab510e/src/lib.rs
источник

MZ

Max Zhuravkov in Rust Async
Нужно написать что-то вроде этого ?
источник

AI

Alex Ilizarov in Rust Async
Max Zhuravkov
Нужно написать что-то вроде этого ?
написать для чего?
источник

AI

Alex Ilizarov in Rust Async
зачем ручками реализовывать стрим/синк?
источник

MZ

Max Zhuravkov in Rust Async
У меня вопрос был как принято комбинировать кодеки - в tokio комбинировать их не принятно а надо работать иначе - я хочу понять как
источник

MZ

Max Zhuravkov in Rust Async
Alex Ilizarov
зачем ручками реализовывать стрим/синк?
Хороший вопрос
источник

Ct

Casual tears in Rust Async
Max Zhuravkov
Нужно написать что-то вроде этого ?
Вместо всего того бойлерплейта можно написать что-то вроде
let serialized = FramedWrite::new(socket, LengthDelimitedCodec::new())
       .with(|json| Bytes::from(serde_json::to_vec(json)))
источник

Ct

Casual tears in Rust Async
Как выше правильно заметили, почти никогда не нужно делать ручками impl Stream for MyStruct
источник

MZ

Max Zhuravkov in Rust Async
Спасибо
источник