코드 4-24에서 볼 수 있듯이 Warp 프레임워크에서 Reject는 딱 한 줄로 구현할 수 있다. Warp의 Reject 트레이트는 마커 트레이트(marker trait)4이다. 내용이 비어 있지만 특정 속성을 충족한다는 일종의 확인을 컴파일러에 알려주어야 할 때 마커 트레이트를 사용한다. 러스트 문서(https://doc.rust-lang.org/std/marker/index.html)와 트레이트에 대한 공식 블로그 게시물(https://blog.rust-lang.org/2015/05/11/traits.html)에 마커에 대한 내용이 자세히 실려 있다.
코드 4-24 사용자 정의 에러를 Warp의 Reject 트레이트로 구현하기
...
impl Reject for Error {}
...
이것으로 Warp의 경로 핸들러에서 에러를 받을 수 있다. 여기서 다음 두 가지를 보완해야 한다.
• 전용 함수에서 매개변수 처리 부분 추출하기
• get_questions 경로 핸들러 내에서 함수를 호출하여 발생한 에러를 return_error 함수로 보내 처리하기