Size: a a a

Rust — русскоговорящее сообществo

2020 March 22

V

Vladimir in Rust — русскоговорящее сообществo
Знак вопроса это поидее нулевые байты, не?
источник

V

Vladimir in Rust — русскоговорящее сообществo
Которые остаются просто не измененными
источник

d

drjackild in Rust — русскоговорящее сообществo
вернее, не, сорян
источник

p

polunin.ai in Rust — русскоговорящее сообществo
Vladimir
Знак вопроса это поидее нулевые байты, не?
Это вроде значит "невалидный utf-8 символ"
источник

d

drjackild in Rust — русскоговорящее сообществo
не сам read, а потом, когда делаю String::from_utf8_lossy подставляет эти знаки под невалидный utf-8
источник

p

polunin.ai in Rust — русскоговорящее сообществo
drjackild
не сам read, а потом, когда делаю String::from_utf8_lossy подставляет эти знаки под невалидный utf-8
Так делай String::foo(buffer[..size])
источник

d

drjackild in Rust — русскоговорящее сообществo
ну, я так и делаю
источник

d

drjackild in Rust — русскоговорящее сообществo
вопрос в том, можно ли не читать сразу какое-то количество байт, а ровно до момента, когда заканчивается реквест
источник

p

polunin.ai in Rust — русскоговорящее сообществo
>до момента когда заканчивается реквест
Это до какого?
источник

d

drjackild in Rust — русскоговорящее сообществo
да вот выходит, что нет такого момента) лан, вопрос снимается, как дебильный
источник

d

drjackild in Rust — русскоговорящее сообществo
хотя блин, все-равно же должен быть какой-то момент (`\r\n`, или какой-то финальный байт), после которого мы понимаем, что сообщение закончилось
источник

d

drjackild in Rust — русскоговорящее сообществo
например, нам прилетает POST с JSON’ом, как понять, что мы вычитали все body?
источник

p

polunin.ai in Rust — русскоговорящее сообществo
drjackild
например, нам прилетает POST с JSON’ом, как понять, что мы вычитали все body?
Когда клиент сказал "я все передал"
источник

V

Vladimir in Rust — русскоговорящее сообществo
drjackild
например, нам прилетает POST с JSON’ом, как понять, что мы вычитали все body?
Ну вообще там по-моему есть размер в хидере который определяет размер тела. Если обобщить, то обычно делают какой-то фрейминг https://blog.stephencleary.com/2009/04/message-framing.html первая ссылка в Гугле вроде норм
источник

ph

pl 🦑 hk in Rust — русскоговорящее сообществo
источник

d

drjackild in Rust — русскоговорящее сообществo
в общем, получилось что-то вроде такого:
let mut req = String::new();
const BUFFER_SIZE: usize = 128;
loop{
   let mut buffer = [0; BUFFER_SIZE];
   let size = stream.read(&mut buffer)?;
   req.push_str(&String::from_utf8_lossy(&buffer[..size]));
   if size < BUFFER_SIZE {
       break
   }
источник

d

drjackild in Rust — русскоговорящее сообществo
даже не знаю, насколько правильный такой подход, но это работает)
источник

d

drjackild in Rust — русскоговорящее сообществo
не, тоже херня, если у нас будет 256 байт, например - то мы зависнем на третьей итерации до таймаута
источник

МЛ

Михаил Лёсин in Rust — русскоговорящее сообществo
А как изобразить такой тип Result<..>, чтобы он мог возвращать не только одну ошибку но и несколько одновременно (независимых, как например во время валидации чего-нибудь), но при этом чтобы работали вопросики?
источник

МЛ

Михаил Лёсин in Rust — русскоговорящее сообществo
может есть какие крейты для подобного? я нашел frunk::validate но с ним не получается собрать динамически (когда я не знаю на этапе компиляции сколько элементов будет проверяться)
источник