Open2
TypeScript脳の人間がRustやってみて嬉しかったところ/つまづいたところ
![nerikosans](https://res.cloudinary.com/zenn/image/fetch/s--h0HHBprV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/d15b1132c6.jpeg)
String Literal に相当する型はあるのか?
Rust の serde で外部から来たJSONをパースするとき、TSで言うところの Discriminated Union を用いた区別がしたかった
type Event = {
type: 'text',
content: string
} | {
type: 'image',
content: string
}
調べたところ
String Literal のように文字列自体を型として扱うことはしなさそう。やるならenumを定義してやるっぽい
serdeでのパースについていえば、 "Internal tag" として attribute? を設定することで対応できた:
#[derive(Serialize, Deserialize)]
#[serde(tag = "type")]
enum Event {
#[serde(rename = "text")]
Text(TextEvent),
}
![nerikosans](https://res.cloudinary.com/zenn/image/fetch/s--h0HHBprV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_70/https://storage.googleapis.com/zenn-user-upload/avatar/d15b1132c6.jpeg)
structはネストして書けるのか?
TSだとこういうふうにtypeを書くことがある
type Foo = {
foo: string,
bar: {
hoge: string,
}
}
Rustでこういう感じにかけないだろうか?
struct Foo {
foo: String,
bar: struct {
hoge: String,
},
}
→ 調査中。(詳しい方ぜひ教えて下さい!)