reqwest 라이브러리를 사용하고 온라인 여러 곳에서 찾은 다음 패턴을 사용하여 게시물을 작성하려고합니다.
let res = http_client.post(&url)
.header("Content-Type", "application/x-www-form-urlencoded")
.form(&form_data)
.send()
.await?;
println!("authenticate response: {}", res.status)
위의 코드 블록은 컴파일 오류를 발생시킵니다.
`?` couldn't convert the error to `std::io::Error` the trait `
`std::convert::From<reqwest::error::Error>` is not implemented for `std::io::Error`
이 오류가 발생하는 이유를 이해할 수 없습니다. 가능한 한 예제에 가깝게 코드를 만들었습니다. 나는 제거하면 그것은 컴파일 ?
과를 res.status
. 하지만 상태 res.status
값을 가져와야 합니다. 더 중요한 것은 내가 무엇을 놓치고 있는지 또는 잘못하고 있는지 이해해야한다는 것입니다.
이 블록을 호출하는 함수의 반환 유형으로 인해 오류가 발생하며 컴파일러는 유형의 오류를 반환하려고합니다 std::io::Error
.
오류 설명에서 main
함수가 다음과 같은 결론을 내립니다 .
fn main() -> Result<(), std::io::Error> {
// ...
}
문제는 reqwest가 io::Error
. 이것은 내가 몇 달 전에 작성한 스 니펫입니다.
use exitfailure::ExitFailure;
fn main() -> Result<(), ExitFailure> {
let res = http_client
.post(&url)
.header("Content-Type", "application/x-www-form-urlencoded")
.form(&form_data)
.send()
.await?;
println!("authenticate response: {}", res.status);
Ok(())
}
반환 된 오류 유형을 사람이 읽을 수있는 반환 유형으로 변환하기 위해 exitfailure 를 사용 했습니다 main
. 나는 그것이 당신의 문제도 해결할 것이라고 생각합니다.
업데이트 : 주석에서 지적되었으며 exifailure는 더 이상 사용되지 않는 종속성을 가지고 있으며 외부 상자 없이도 달성 할 수 있습니다. 캡슐화 된 동적 오류를 반환하는 권장 방법이 있습니다.Box<dyn std::error::Error>
fn main() -> Result<(), Box<dyn std::error::Error>> {
let res = http_client
.post(&url)
.header("Content-Type", "application/x-www-form-urlencoded")
.form(&form_data)
.send()
.await?;
println!("authenticate response: {}", res.status);
Ok(())
}
합의 된 오류를 반환하는 동작 main
은 동일합니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다