• rust apteryx Как правильно и православно делать кодек utf8 для Tokio, чтобы само автоматически из чанков делало utf8 строки или позволяло итератить массив байтов по utf8 символам? Готового кода не вижу!
    ♡ recommended by @O01eg

Replies (36)

  • @ermine, Ох, лол, в расте еще и свой стринг надо написать, как в сишечке.
  • @vt, я знала, что ты ответишь быстрее Олежки, поэтому долго терпела взбрыки жука в сафари, прежде чем я смогла написать этот пост!
  • @ermine, судя по doc.rust-lang.org строки и так всегда utf8 и с помощью метода `from_utf8` позволяет из массива байт получить строку. То есть, например, заводишь буфер, чтобы там накапливать байты, пришедшие из пакетов, а затем получаешь всю строку из байт. С другой стороны тебе-то и строка не нужна, парсить-то можно напрямую из буфера.
  • @ma1uta, я с тобой так и rust выучу. ;)
  • @ma1uta, я делаю парсер xml как имплементацию trait Decoder, там decode дает буфер BytesMut. Вот сомнительно, что его всегда безопасно просто так конвертить в str, чтобы по str.chars() просто итерить
  • @ma1uta, там все же хитрее с lifetime & ownership, этим не переболеешь просто беседуя за чашечкой чая
  • @ermine, я так понял, что метод `from_utf8` проверяет, что символы являются корректными символами utf8. Там ещё есть метод, чтобы получить строку из буфера байт без проверки, но он тебе не нужен.
  • @ma1uta, не, надо с проверкой, и чтобы осталось в буфере недосимвол для следующей итерации скачивания из интернета остальной части символа
  • @ermine, ну так я и предлагал в своём первом сообщении завести свой буфер, чтобы там накапливать байты из BytesMut из разных пакетов, а после того, как придёт последний пакет сделать `from_utf8`
  • @ma1uta, последний пакет придет через год!
  • @ermine, в нормальных декодерах такой декодер бы возвращал ошибки двух типов — MalformedUTF8 и TooFew
  • @ermine, не придёт, потому что до этого ты закроешь соединение с ошибкой connection-timeout, когда истечёт таймаут. А если придёт что-то другое вместо пакета, то not-well-formed или invalid-xml.
  • @ma1uta, можно срать Войну и Мир так, что все время банки будут с недосимволами на конце. А память не резиновая.
  • @ermine, я бы пока не заморачивался такими вещами и считал бы, что всё у нас хорошо и приходит корректно, ибо тут уже начинается преждевременная оптимизация (дядька vt прав). Когда уже будет рабочая альфа версия, тогда можно будет начать гонять на реальной сети и тестировать и уже оптимизировать декодер для подобных вещей. Потому что там даже по большому счёту и строки не нужны, можно написать свой конечный автомат, который будет напрямую тянуть байт, проверять их и парсить. Но это потом, когда будет готово уже хоть что-нибудь.
  • @ma1uta, я бы тоже не заморачивалась и сделала бы свой адаптер, тем более что алгоритм сбора бантиков в юникод дебильно прост, вот придеццо изучить битовые операции в расте!
  • @ermine, если есть уже рабочий (хоть как-нибудь) декодер, то можно на первых порах использовать его. Потом перепишешь если надо будет. Это не должно вызывать препятствий на данном этапе.
  • @ma1uta, да можно пока сваять свой декодер утф8, пока @O01eg еще не прибежал и не внес свои пять копеек
  • @O01eg, интересно, через год я смогу писать такой нечитабельный код?
  • @ermine, Там же всё просто, я даже правил его
  • @ermine, Пока читаемый код на расте! Никогда не видел еще!
  • @ermine, Покажи*
  • @vt, почини жуйк уже, чтобы написать коммент, мне опять пришлось ждать долго, пока оно в сафари разлипнется, а ждать некогда уже
  • @ermine, и нотифаи из телефона оно не всасывает
  • @ermine, @oxpa сказал у него там network unreachable пишет в эти моменты
  • @vt, не во все. Вчера, когда пингвин скакал по клавиатуре, был network unreachable, а когда @ermine жалуется на пуши — нет.
  • @oxpa, вот значит в эти моменты головки запаркованы! У меня даже ls зависает на сервере, через секунд 10-15 отвисает
  • @oxpa, дай лучше права рута на сервере жуйка, я буду его ребутить каждое утро!
  • @vt, iowait посмотри при случае. Или хотя бы load average. Но в целом, с винтами там всё ОК было. А вот сеть иногда дурит, видимо.
  • @oxpa, я вообще не понимаю, при чем тут сервер, если это приложение на жопоскрипте блочит само себя, когда с сетью все хорошо
  • @ermine, оно затыкается когда я закрываю макбук или оно с откинутой крышкой уходит спячку, когда я далеко отхожу от него
  • @ermine, ты говорила что после ребута ничего не затыкалось
  • @vt, а какая связь между ребутом и сетью?
  • @ermine, может это просто ты так пишешь на жопоскрипте
  • @ermine, Белый цисгендерный мужчина всегда крайний!
  • @vt, и что ты намерен теперь делать?