⛏️
Rustでtypescriptのstring literal typeみたいなことをやりたいときはどうする
typescriptのstring literal type
type Animal = 'cat' | 'dog'
このような型定義をRustでやりたい。具体的にはRustのdeserializeするためのstruct定義で行いたい。
Enumを使った方法
serde_jsonを使用して文字列をBlockというstructにdeserializeする流れ。
特にdeselializeの処理を独自に実装する必要などはなかった。
use serde_derive::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize)]
enum Animal {
Cat,
Dog,
}
#[derive(Debug, Serialize, Deserialize)]
struct Block {
animal: Animal,
}
fn main() -> Result<(), Box<dyn std::error::Error>> {
let json = r#"{ "animal": "Cat" }"#;
let b: Block = serde_json::from_str(json)?;
println!("{:?}", b);
Ok(())
}
出力結果
Block { animal: Cat }
Discussion