rust 是否将lambda_http Body对象转换为字符串类型?

w8rqjzmb  于 2023-03-30  发布在  其他
关注(0)|答案(2)|浏览(98)

我是Rust的新手。我有一个lambda_http Request对象,我想以字符串的形式获取Body的文本。
我正在阅读docs on Body,但对Rust来说太新了,无法理解我在看什么。可能我需要以某种方式使用Text属性?
当前代码:

async fn process_request(request: Request) -> Result<impl IntoResponse, std::convert::Infallible> {
    let body = request.body();
    let my_string = body.to_string();
    if let Err(e) = write_to_dynamodb(&my_string).await {
        eprintln!("Error: {}", DisplayErrorContext(e));
    }
}

这给了我错误:

let my_string = body.to_string();
|                          ^^^^^^^^^ method cannot be called on `&lambda_http::Body` due to unsatisfied trait bounds

我做错了什么,我应该如何阅读文档?

odopli94

odopli941#

因为Body derefs到&[u8],所以使用std::str::from_utf8()(如果需要String而不是&str,可以调用to_owned()):

let body = request.body();
let my_string = std::str::from_utf8(body).expect("non utf-8");
cl25kdpy

cl25kdpy2#

在你链接的文档中,它看起来像是一个枚举。如果你想把它作为一个字符串,你首先必须检查枚举是否是文本,如下所示:

let body = request.body();
    if let lambda_http::Body::Text(my_string) = body {
        println!("{}", my_string);
        // do stuff here with my_string
    }

相关问题