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")
),
}
}
}
...