elm_rs 0.2.3

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

#[derive(Debug, PartialEq, Deserialize, Serialize, Elm, ElmEncode, ElmDecode)]
#[serde(transparent)]
struct TransparentNamed {
    field: u8,
}

#[derive(Debug, PartialEq, Deserialize, Serialize, Elm, ElmEncode, ElmDecode)]
#[serde(transparent)]
struct TransparentNewtype(u8);

#[derive(Debug, PartialEq, Deserialize, Serialize, Elm, ElmEncode, ElmDecode)]
enum Other {
    A,
    #[serde(other)]
    B,
}

#[derive(Debug, PartialEq, Deserialize, Serialize, Elm, ElmEncode, ElmDecode)]
#[serde(rename_all = "UPPERCASE")]
struct RenameStruct {
    uppercase: u8,
    #[serde(rename = "another-field")]
    renamed: u8,
    #[serde(rename(serialize = "se"))]
    rename_for_serialization: u8,
    #[serde(rename(deserialize = "de"))]
    rename_for_deserialization: u8,
}

#[derive(Debug, PartialEq, Deserialize, Serialize, Elm, ElmEncode, ElmDecode)]
#[serde(rename_all = "UPPERCASE")]
enum RenameEnum {
    Uppercase,
    #[serde(rename = "another-variant")]
    Renamed,
    #[serde(rename(serialize = "se"))]
    RenameForSerialization,
    #[serde(rename(deserialize = "de"))]
    RenameForDeserialization,
}

#[derive(Debug, PartialEq, Deserialize, Serialize, Elm, ElmEncode, ElmDecode)]
struct Skip {
    #[serde(skip)]
    skipped: u8,
    not_skipped: u8,
}

#[test]
fn transparent_struct() {
    super::test_json(TransparentNamed { field: 0 });
}

#[test]
fn transparent_newtype() {
    super::test_json(TransparentNewtype(0));
}

#[test]
fn other() {
    let val: Other = super::test_with_json("\\\"other\\\"", "");
    assert_eq!(val, Other::B);
}

#[test]
fn rename_struct() {
    super::test_json(RenameStruct {
        uppercase: 0,
        renamed: 0,
        rename_for_serialization: 0,
        rename_for_deserialization: 0,
    })
}

#[test]
fn rename_enum() {
    super::test_json(RenameEnum::Uppercase);
    super::test_json(RenameEnum::Renamed);
    super::test_json(RenameEnum::RenameForSerialization);
    super::test_json(RenameEnum::RenameForDeserialization);
}

#[test]
fn skip() {
    super::test_json(Skip {
        skipped: 0,
        not_skipped: 0,
    });
}