elm_rs 0.2.3

Generate Elm bindings for your Rust types
Documentation
use crate::{Elm, ElmDecode, ElmEncode};
use serde::{Deserialize, Serialize};

#[derive(Debug, Elm, ElmEncode, ElmDecode, Serialize, Deserialize, PartialEq)]
enum Enum1<T> {
    Unit11,
    Unit12,
    Newtype11(T),
    Newtype12(T),
    Tuple11(T, T),
    Tuple12(T, T),
    Named11 { t: T },
    Named12 { t: T },
}

#[derive(Debug, Elm, ElmEncode, ElmDecode, Serialize, Deserialize, PartialEq)]
enum Enum2<T> {
    Unit21,
    Unit22,
    Newtype21(T),
    Newtype22(T),
    Tuple21(T, T),
    Tuple22(T, T),
    Named21 { t: T },
    Named22 { t: T },
}

#[derive(Debug, Elm, ElmEncode, ElmDecode, Serialize, Deserialize, PartialEq)]
struct Struct<T> {
    unit: Enum1<T>,
    newtype: Enum1<T>,
    tuple: Enum1<T>,
    named: Enum1<T>,
    named_unit: Enum2<Enum1<T>>,
    named_newtype: Enum2<Enum1<T>>,
    named_tuple: Enum2<Enum1<T>>,
    named_named: Enum2<Enum1<T>>,
}

#[test]
fn complex() {
    super::test_json_with_deps(
        Struct {
            unit: Enum1::Unit11,
            newtype: Enum1::Newtype11(vec![1, 2, 3, 4]),
            tuple: Enum1::Tuple11(vec![1, 2, 3, 4], vec![1, 2, 3, 4]),
            named: Enum1::Named11 {
                t: vec![1, 2, 3, 4],
            },
            named_unit: Enum2::Named21 { t: Enum1::Unit11 },
            named_newtype: Enum2::Named21 {
                t: Enum1::Newtype11(vec![1, 2, 3, 4]),
            },
            named_tuple: Enum2::Named21 {
                t: Enum1::Tuple11(vec![1, 2, 3, 4], vec![1, 2, 3, 4]),
            },
            named_named: Enum2::Named21 {
                t: Enum1::Named11 {
                    t: vec![1, 2, 3, 4],
                },
            },
        },
        &format!(
            "\
{}

{}

{}

{}

{}

{}
",
            Enum1::<Vec<usize>>::elm_definition().unwrap(),
            Enum1::<Vec<usize>>::encoder_definition().unwrap(),
            Enum1::<Vec<usize>>::decoder_definition().unwrap(),
            Enum2::<Enum1<Vec<usize>>>::elm_definition().unwrap(),
            Enum2::<Enum1<Vec<usize>>>::encoder_definition().unwrap(),
            Enum2::<Enum1<Vec<usize>>>::decoder_definition().unwrap(),
        ),
    )
}