표준 에러 타입이 멀리 데려가지만, 진짜 프로그램은 자기 걸 정의해. 커스텀 에러 타입은 네 코드가 실패할 수 있는 방식을 정확히 나열하게 해 — 그리고 여느 enum 처럼 거기에 패턴 매칭해.
에러 enum
관용적 모양은 실패 모드마다 variant 하나인 enum 이야: NotFound, Invalid(String), Io(...). 호출자가 variant 에 match 해서 각 실패 종류에 다르게 반응할 수 있어 — 타임아웃엔 재시도, parse 에러엔 보고, 없는 파일엔 포기.
From 으로 ? 연결하기
? 가 저수준 에러를 네 enum 으로 변환하게 하려면 From<ThatError> for YourError 를 구현해. 이제 Result<_, YourError> 를 반환하는 함수는 ThatError 로 실패하는 연산에 ? 를 쓸 수 있고, 변환이 자동으로 일어나. Traits 트랙의 From trait 의 구체적 보상이야.
'진짜' 에러 타입엔 Display 와 std::error::Error 를 구현해.
Debug 를 derive 하고 Display (사람용 메시지) 더하기 마커 trait std::error::Error 를 구현하면 네 타입이 예의바른 시민이 돼 — Box<dyn Error> 와 쓸 수 있고, 출력 가능하고, 변환 가능해. 약간의 보일러플레이트인데, 바로 다음 레슨의 크레이트가 없애는 거야.언제 수고할 가치가 있나
일회성 스크립트는 Result<_, String> 이나 Box<dyn Error> 를 반환하고 넘어가도 돼. 남이 의존하는 라이브러리는 정밀한 에러 enum 을 정의해야 호출자가 match 하고 반응할 수 있어. 프로그램 크기 — 그리고 누가 에러를 소비하는지 — 가 얼마나 구조가 값할지 정해.