더북(TheBook)
let id = QuestionId::from_str("1").unwrap(); // from_str()은 실패할 수 있다

간단히 얘기하자면 ‘&str에서 X 타입을 만들어라’라는 것이다. 러스트는 암묵적 타입 변환이 없으며, 오직 명시적인 것만 있다. 그러니 한 타입에서 다른 타입으로 바꾸려면 이를 지정해야 한다.

코드 2-18 QuestionId에 FromStr 트레이트 구현하기

use std::io::{Error, ErrorKind};
use std::str::FromStr;

...

impl FromStr for QuestionId {
    type Err = std::io::Error;

    fn from_str(id: &str) -> Result<Self, Self::Err> {
        match id.is_empty() {
            false => Ok(QuestionId(id.to_string())),
            true => Err(
                Error::new(ErrorKind::InvalidInput, "No id provided")
            ),
        }
    }
}

...
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.