struct_to_string 0.2.0

A Rust proc-macro library to convert struct definitions to a string representation. An example use case would be for API documentation, and you want to present the Rust struct's for the API response on a webpage.
Documentation
extern crate struct_to_string;
use struct_to_string::StructToString;

#[derive(StructToString)]
struct ComprehensiveTestStruct {
    int_field: i32,
    uint_field: u32,
    float_field: f64,
    bool_field: bool,
    char_field: char,
    str_field: String,
    option_field: Option<i32>,
    array_field: [i32; 3],
    slice_field: Vec<i32>,
    tuple_field: (i32, String),
    tuple_struct_field: TupleStruct,
    enum_field: AnEnum,
    nested_struct_field: NestedStruct,
}

struct TupleStruct(i32, f64, String);

struct NestedStruct {
    nested_field: i32,
}

enum AnEnum {
    Variant1,
    Variant2(i32),
    Variant3 { x: i32, y: i32 },
}

#[test]
fn to_rust() {
    let expected = r#"struct ComprehensiveTestStruct {
    int_field: i32,
    uint_field: u32,
    float_field: f64,
    bool_field: bool,
    char_field: char,
    str_field: String,
    option_field: Option<i32>,
    array_field: [i32;3],
    slice_field: Vec<i32>,
    tuple_field: (i32,String),
    tuple_struct_field: TupleStruct,
    enum_field: AnEnum,
    nested_struct_field: NestedStruct
}"#;

    let struct_string = ComprehensiveTestStruct::to_rust_string();

    println!("--- RUST CONVERSION --- ");
    println!("--- WHAT WAS GENERATED --- ");
    println!("{}", struct_string);
    println!("--- WHAT WAS EXPECTED --- ");
    println!("{}", expected);

    assert_eq!(struct_string, expected);
}

#[test]
fn to_typescript() {
    let expected = r#"interface ComprehensiveTestStruct {
    int_field: number;
    uint_field: number;
    float_field: number;
    bool_field: boolean;
    char_field: string;
    str_field: string;
    option_field?: number | null;
    array_field: number[];
    slice_field: number[];
    tuple_field: [number, string];
    tuple_struct_field: TupleStruct;
    enum_field: AnEnum;
    nested_struct_field: NestedStruct;
}"#;

    let struct_string = ComprehensiveTestStruct::to_typescript_string();

    println!("--- TS CONVERSION --- ");
    println!("--- WHAT WAS GENERATED --- ");
    println!("{}", struct_string);
    println!("--- WHAT WAS EXPECTED --- ");
    println!("{}", expected);

    assert_eq!(struct_string, expected);
}

#[test]
fn to_python() {
    let expected = r#"@dataclass_json
@dataclass
class ComprehensiveTestStruct:
    int_field: int
    uint_field: int
    float_field: float
    bool_field: bool
    char_field: str
    str_field: str
    option_field: Optional[int]
    array_field: List[int]
    slice_field: List[int]
    tuple_field: Tuple[int, str]
    tuple_struct_field: TupleStruct
    enum_field: AnEnum
    nested_struct_field: NestedStruct
"#;

    let struct_string = ComprehensiveTestStruct::to_python_string();

    println!("--- PYTHON CONVERSION --- ");
    println!("--- WHAT WAS GENERATED --- ");
    println!("{}", struct_string);
    println!("--- WHAT WAS EXPECTED --- ");
    println!("{}", expected);

    assert_eq!(struct_string, expected);
}

#[test]
fn to_go() {
    let expected = r#"type ComprehensiveTestStruct struct {
    int_field int32
    uint_field uint32
    float_field float64
    bool_field bool
    char_field rune
    str_field string
    option_field *int32
    array_field [3]int32
    slice_field []int32
    tuple_field struct{} // CANNOT CONVERT THIS TO THE GO PROGRAMMING LANGUAGE. TUPLES ARE UNSUPPORTED BY GO: (int32, string)
    tuple_struct_field TupleStruct
    enum_field AnEnum
    nested_struct_field NestedStruct
}"#;

    let struct_string = ComprehensiveTestStruct::to_go_string();

    println!("--- GO CONVERSION --- ");
    println!("--- WHAT WAS GENERATED --- ");
    println!("{}", struct_string);
    println!("--- WHAT WAS EXPECTED --- ");
    println!("{}", expected);

    assert_eq!(struct_string, expected);
}

#[test]
fn to_java() {
    let expected = r#"public class ComprehensiveTestStruct {
    public int int_field;
    public long uint_field;
    public double float_field;
    public boolean bool_field;
    public char char_field;
    public String str_field;
    public Integer option_field;
    public int[] array_field;
    public List<Integer> slice_field;
    public Tuple<Integer, String> tuple_field;
    public TupleStruct tuple_struct_field;
    public AnEnum enum_field;
    public NestedStruct nested_struct_field;
}"#;

    let struct_string = ComprehensiveTestStruct::to_java_string();

    println!("--- JAVA CONVERSION --- ");
    println!("--- WHAT WAS GENERATED --- ");
    println!("{}", struct_string);
    println!("--- WHAT WAS EXPECTED --- ");
    println!("{}", expected);

    assert_eq!(struct_string, expected);
}

#[test]
fn to_csharp() {
    let expected = r#"public class ComprehensiveTestStruct {
    public int int_field;
    public uint uint_field;
    public double float_field;
    public bool bool_field;
    public char char_field;
    public string str_field;
    public int? option_field;
    public int[] array_field;
    public List<int> slice_field;
    public (int, string) tuple_field;
    public TupleStruct tuple_struct_field;
    public AnEnum enum_field;
    public NestedStruct nested_struct_field;
}"#;

    let struct_string = ComprehensiveTestStruct::to_csharp_string();

    println!("--- C# CONVERSION --- ");
    println!("--- WHAT WAS GENERATED --- ");
    println!("{}", struct_string);
    println!("--- WHAT WAS EXPECTED --- ");
    println!("{}", expected);

    assert_eq!(struct_string, expected);
}