Deserialización de TOML en vector de enumeración con valores

Estoy tratando de leer un archivo TOML para crear una estructura que contenga un vector de enumeraciones con valores asociados. Aquí está el código de muestra:

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]

Sé que el archivo parece "incorrecto", pero no tengo idea de cómo escribir las acciones en el archivo TOML de modo que la caja pueda reconocerlas como una enumeración con X número de valores.

El error que obtengo al ejecutar este ejemplo concargo run es el siguiente:

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.

Sé que probablemente necesito implementarFromStr para que mi enumeración convierta una cadena en mi enumeración, y sé brevemente que se pueden implementar deserializadores personalizados para deserializar de una manera específica, pero no estoy seguro de cómo encajan estas piezas.

Parece que un ejemplo equivalente usando serde_json en lugar de TOML funciona directamente (usando archivos JSON en lugar de TOML, por supuesto).

Versión JSON del 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);
}

Los datos JSON leídos / escritos en este ejemplo son:

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

¿Quizás la caja TOML no puede admitir mi caso de uso?

Respuestas a la pregunta(1)

Su respuesta a la pregunta