Desserializando TOML em vetor de enum com valores

Estou tentando ler um arquivo TOML para criar uma estrutura que contém um vetor de enumerações com valores associados. Aqui está o código de exemplo:

extern crate serde;
#[macro_use]
extern crate serde_derive;
extern crate toml;

use std::fs::File;
use std::io::Read;

#[derive(Debug, Deserialize, PartialEq)]
struct Actor {
    name: String,
    actions: Vec<Actions>,
}

#[derive(Debug, Deserialize, PartialEq)]
enum Actions {
    Wait(usize),
    Move { x: usize, y: usize },
}

fn main() {
    let input_file = "./sample_actor.toml";
    let mut file = File::open(input_file).unwrap();
    let mut file_content = String::new();
    let _bytes_read = file.read_to_string(&mut file_content).unwrap();
    let actor: Actor = toml::from_str(&file_content).unwrap();
    println!("Read actor {:?}", actor);
}

Cargo.toml

[dependencies]
serde_derive = "1.0.10"
serde = "1.0.10"
toml = "0.4.2"

sample_actor.toml

name = "actor1"
actions = [move 3 4, wait 20, move 5 6]

Sei que o arquivo parece "errado", mas não tenho idéia de como devo escrever as ações no arquivo TOML, de modo que a caixa possa reconhecê-las como uma enumeração com um número X de valores.

O erro que recebo ao executar este exemplo comcargo run é o seguinte:

thread 'main' panicked at 'called `Result::unwrap()` on an `Err` value: Error { inner: ErrorInner { kind: NumberInvalid, line: Some(1), col: 11, message: "", key: [] } }', /checkout/src/libcore/result.rs:906:4
note: Run with `RUST_BACKTRACE=1` for a backtrace.

Eu sei que provavelmente preciso implementarFromStr para que meu enum converta uma string em meu enum, e sei brevemente que desserializadores personalizados podem ser implementados para desserializar de uma maneira específica, mas não tenho certeza de como essas peças se encaixam.

Parece que um exemplo equivalente usando serde_json em vez de TOML funciona diretamente (usando arquivos JSON em vez de TOML, é claro).

Versão JSON do código:

extern crate serde;
extern crate serde_json;

#[macro_use]
extern crate serde_derive;

use serde_json::Error;
use std::fs::File;
use std::io::Read;

#[derive(Debug, Serialize, Deserialize)]
enum Foo {
    bar(u32),
    baz { x: u32, y: u32 },
}

#[derive(Debug, Serialize, Deserialize)]
struct Address {
    street: String,
    city: String,
    nums: Vec<Foo>,
}

fn main() {
    /*
        let address = Address {
            street: "10 Downing Street".to_owned(),
            city: "London".to_owned(),
            nums : vec![Foo::bar(1), Foo::baz{x : 2, y : 3}],
        };

        // Serialize it to a JSON string.
        let j = serde_json::to_string(&address).unwrap();

        // Print, write to a file, or send to an HTTP server.
        println!("{}", j);
    */
    let input_file = "./sample_address.json";
    let mut file = File::open(input_file).unwrap();
    let mut file_content = String::new();
    let _bytes_read = file.read_to_string(&mut file_content).unwrap();
    let address: Address = serde_json::from_str(&file_content).unwrap();
    println!("{:?}", address);
}

Os dados JSON lidos / gravados neste exemplo são:

Address { street: "10 Downing Street", city: "London", nums: [bar(1), baz { x: 2, y: 3 }] }

Talvez a caixa TOML não possa suportar meu caso de uso?

questionAnswers(1)

yourAnswerToTheQuestion