Предположим, гипотетическая библиотека C возвращает указатель и длину. При последовательных вызовах из одного потока её буфер остаётся доступным для чтения и действительным до следующего вызова библиотеки. Передачи владения нет. Пока не проверено, могут ли другой дескриптор, обратный вызов или фоновый поток сделать буфер недействительным.
Указатель на байты с квалификатором const ограничивает изменение через этот путь доступа. Он не устанавливает время жизни буфера и не исключает изменений через другой путь. Поэтому сохранение дескриптора библиотеки живым может оказаться необходимым, но недостаточным.
Один из вариантов обёртки копирует байты в Vec<u8>, владеющий этой копией, прежде чем разрешить следующий вызов. На всём протяжении копирования указатель и длина должны задавать действительную область, доступную для чтения, а внешний код не должен вносить конфликтующих изменений. Копирование не исправит уже недействительный указатель.
Заимствованное представление должно исключать любой вызов, способный сделать его недействительным, на всё время существования представления. Заимствование, связанное с одним дескриптором, работает только при условии, что все соответствующие действия, нарушающие действительность буфера, проходят через этот дескриптор. Если библиотека использует общую глобальную память, важен и другой дескриптор. Параллельные вызовы и повторный вход через обратные вызовы тоже требуют обоснования.
Я бы начал с копии, владеющей памятью, и записал гарантии внешней стороны, которые всё ещё необходимы. Это предложенная граница, а не свидетельство того, что внешняя сторона её соблюдает.