params: HashMap<String, String>,
) -> Result<impl warp::Reply, warp::Rejection> {
let answer = Answer {
id: AnswerId("1".to_string()),
content: params.get("content").unwrap().to_string(),
question_id: QuestionId(params.get("questionId").unwrap().to_string()),
};
store.answers.write().await.insert(answer.id.clone(), answer);
Ok(warp::reply::with_status("Answer added", StatusCode::OK))
}
...
이 함수는 ID를 직접 구현하기 때문에 확장하기가 어렵다. 이 부분은 책 뒷부분에서 개선하겠지만, 지금은 새로운 답변을 만들 때 고유 ID를 생성하는 방법을 찾아 연습해 보는 것이 좋다.
핵심 부분은 해시 맵에서 매개변수를 읽는 것이다. 여기서는 실제 운용 목적이 아니어서 unwrap을 사용했다. 매개변수를 찾을 수 없으면 러스트 애플리케이션은 패닉 상태가 되어 비정상 종료된다. 그러므로 match를 사용하여 누락된 매개변수에서 발생하는 에러를 개별적으로 반환해야 한다. 일단 작업을 끝내야 하니 새로운 경로를 만들고 이를 main 함수의 경로 핸들러에 연결한다.