메서드 안에서는 question_id(튜플 구조체로 0인 인덱스로 접근할 수 있다)의 문자열을 i32 타입으로 파싱할 수 있는지 확인한다. 이후의 애플리케이션에서는 이렇게 생성된 객체를 더 복잡한 유효성 검사기에 전달하는 것을 상상할 수 있다. 지금은 ID가 유효한 숫자인지 확인하는 것만으로도 충분하다.
&str 타입을 숫자로 파싱할 수 없으면 사용자 정의 에러를 생성하고 Err(warp::reject::custom(InvalidId))로 해당 요청을 거부한다. 이로써 Warp에게 다음 Filter로 가라고 지시한다. 그 다음 recover 필터로 모든 거부를 가져오고 다시 보내야 하는 HTTP 메시지를 확인한다. 다음 코드와 같이 get_items 경로를 수정하고 마지막에 recover 필터를 추가한다.
코드 3-9 경로 필터에서 우리의 에러 필터 사용하기
...
#[tokio::main]
async fn main() {
let get_items = warp::get()
.and(warp::path("questions"))
.and(warp::path::end())
.and_then(get_questions)
.recover(return_error);