Могу ли я создавать перечисления в ржавчине, которые имеют кортежи в качестве значений? - PullRequest
0 голосов
/ 06 мая 2020

Могу ли я использовать кортеж в качестве значения в перечислениях? В основном я хочу это, чтобы использовать целочисленное значение в качестве ввода базы данных и строковое значение в качестве дружественного ответа вызывающему пользовательскому интерфейсу.

Например:

#[derive(Deserialize, Debug)]
enum  MyTestType {
    A(0, "Default"),
    B(1, "something else"),
    C(18, "18"),
    D(4, "D")
}

Я использую serde crate в ржавчине, и было бы удобно иметь его, чтобы избежать структуры здесь

1 Ответ

2 голосов
/ 06 мая 2020

Конечно:

use serde::Serialize;
use serde_json;

#[derive(Serialize)]
enum Test {
    A(u32, String),   // NOT a tuple
    B((u32, String))  // actual tuple
}

fn main () {
    let a = Test::A(15, "Hello".to_string());
    let b = Test::B((42, "Hi".to_string()));

    println!("{}", serde_json::to_string(&a).unwrap());
    println!("{}", serde_json::to_string(&b).unwrap())
}

Вывод:

{"A":[15,"Hello"]}
{"B":[42,"Hi"]}
...