Предположим, потоковый парсер получает буфер и может сообщить о неполной записи. Кто владеет этими байтами после отказа и откуда начнётся следующий вызов? Result различает успех и ошибку. Его варианты сами по себе не определяют, сдвинул ли парсер курсор, изменил ли временное хранилище и сохранил ли входные данные.
Рассмотрим гипотетический интерфейс, в котором вызывающий код владеет вектором и предоставляет парсеру общий срез. Парсер владеет курсором и временными декодированными полями. При успехе он перемещает курсор за одну полную запись. При неполном вводе оставляет курсор в начале этой записи и отбрасывает предварительные поля. При некорректном вводе также сохраняет начальную позицию, возвращая смещение проблемного байта. Диагностика неполного ввода может содержать начало записи и позицию, до которой дошло сканирование. Последняя показывает, что было просмотрено, но не означает обязательства потребить эти байты.
Это предлагаемые гарантии, для которых изменения нужно откладывать до успеха. Один лишь возврат Err их не обеспечивает. Вызывающий код может сохранить непотреблённый остаток, добавить байты и повторить попытку. Однако если успешная запись заимствует данные вектора, использование этого доступа должно закончиться до операции, требующей изменяемого доступа к вектору.
Передача владения вектором потребовала бы отдельно решить, возвращается ли он при ошибке. Заимствование сохраняет владельца, но позицию после отказа и допустимые следующие операции всё равно нужно явно описать.