트레이트의 서명으로 &str 타입을 가져다 자체 타입(QuestionId)을 반환하거나 ID가 비어 있는 경우에 에러를 반환할 수 있다. 매개변수 이름을 id라 하고 &str 타입으로 지정한다(이것이 우리가 받게 될 것이다). 매개변수 이름(이 경우에는 id)은 사실 무엇이든 상관없다. 그런 다음 id가 비어 있지 않다면 구조체에서 지정한 대로 String으로 변환하여 이를 포함하는 QuestionId 타입으로 반환한다.
다음으로 main 함수에서 질문 ID를 만드는 방식을 바꾼다. .to_string을 사용하는 대신 QuestionId에서 ::from_str을 호출한다. 트레이트 구현을 보면 from_str이 &self를 취하지 않으므로 마침표(.)를 사용해 호출할 수 있는 메서드가 아니라 이중 콜론(::)을 사용해 호출하는 연관 함수임을 알 수 있다.