Как я могу преобразовать bytes :: Bytes в & str, не делая копий? - PullRequest
0 голосов
/ 19 декабря 2018

У меня есть bytes::Bytes (в данном случае это тело запроса в actix-web) и другая функция, которая ожидает аргумент среза строки: foo: &str.Как правильно преобразовать bytes::Bytes в &str, чтобы не было сделано никаких копий?Я пробовал &body.into(), но получаю:

the trait `std::convert::From<bytes::bytes::Bytes>` is not implemented for `str`

Вот основные сигнатуры функций:

pub fn parse_body(data: &str) -> Option<&str> {
    // Do stuff
    // ....
    Ok("xyz")
}

fn consume_data(req: HttpRequest<AppState>, body: bytes::Bytes) -> HttpResponse {
    let foo = parse_body(&body);
    // Do stuff
    HttpResponse::Ok().into()
}

1 Ответ

0 голосов
/ 19 декабря 2018

Bytes обращается к [u8], поэтому вы можете использовать любой существующий механизм для преобразования &[u8] в строку.

use bytes::Bytes; // 0.4.10
use std::str;

fn example(b: &Bytes) -> Result<&str, str::Utf8Error> {
    str::from_utf8(b)
}

См. Также:

Я пробовал &body.into()

From и Into предназначены только для безошибочных преобразований.Не все произвольные порции данных являются действительными UTF-8.

...