다음으로 넘어가기 전에, 먼저 이 세 가지 트레이트가 필요한 이유를 알아보자. QuestionId를 해시 맵의 인덱스로 사용하려고 하면 되지 않는다. 우리가 만든 사용자 정의 구조체에 PartialEq, Eq, Hash를 파생(derive)시켜야 한다. 인덱스로 값을 가져올 때 해시 맵은 사용 가능한 모든 인덱스(키)를 내부에서 비교하여 요청한 인덱스를 찾아야 한다. 따라서 전달한 키와 해시 맵 내부의 키 각각의 해시 값을 이용해 비교한다.
HashMap의 키/인덱스로 사용되는 모든 객체는 Eq, PartialEq, Hash 트레이트가 필요하다. 우리의 경우, 키/인덱스(QuestionId)는 String 타입이고 이미 세 가지 트레이트를 구현하고 있으므로 QuestionId 선언에서 derive로 선언하기만 하면 된다. 컴파일러에서 나온 모든 에러를 수정했으니 cargo run을 실행해 서버를 다시 실행하면 /questions 경로로 결과를 보내줄 것이다.