#Rocket
以下のイメージ。
```rust
/// values=ab,cde,fg と指定したら values = ["ab", "cde", "fg"]として受け取りたい
#[get("/hoge?<values>")]
pub fn index(values: CommaSeparatedValues) -> Json<Response> {
// ...
}
```
https://rocket.rs/v0.4/guide/requests/#query-strings
`FromFormValue`トレイトを実装した`CommaSeparatedValues`を作成する。
```rust
use itertools::Itertools;
use rocket::http::RawStr;
use rocket::request::FromFormValue;
/// カンマ区切りで複数の値を指定する文字列型クエリ
#[derive(Debug)]
pub struct CommaSeparatedValues(Vec<String>);
impl<'v> FromFormValue<'v> for CommaSeparatedValues {
type Error = &'v RawStr;
fn from_form_value(v: &'v RawStr) -> Result<Self, Self::Error> {
match v.url_decode() {
Ok(decoded) => Ok(CommaSeparatedValues(
decoded.split(',').map(String::from).collect_vec(),
)),
_ => Err(v),
}
}
}
impl CommaSeparatedValues {
pub fn unwrap(self) -> Vec<String> {
self.0
}
}
```
別crateの型や`type`の別名に対して`impl`はできないため、wrapした`struct`を使う。