serde_cast 1.0.1

Simple A to B cast
Documentation
#[macro_use]
extern crate serde_cast;

use serde::{Serialize, Deserialize};


#[derive(Serialize, Deserialize)]
struct A {
    a: String,
    b: (u32, u32),
}

#[derive(Serialize, Deserialize)]
struct B {
    a: String,
    b: (u32, u32),
}

#[derive(Serialize, Deserialize)]
struct C {
    a: i32,
    b: (u32, u32),
}


#[test]
fn valid_cast() {
    let a = A {
        a: "Hello, world!".to_owned(),
        b: (2, 3),
    };
    let b: B = serde_cast!(&a);

    assert_eq!(a.a, b.a);
    assert_eq!(a.b, b.b);
}

#[test]
#[should_panic(expected = "serde_cast failed")]
fn invalid_cast() {
    let a = A {
        a: "Hello, world!".to_owned(),
        b: (2, 3),
    };
    let c: C = serde_cast!(&a);

    let _ = c;
}

#[test]
fn the_only_example_code() {
    use serde::{Serialize, Deserialize};
    use serde_cast::serde_cast;

    #[derive(Serialize)]
    struct A {
        field: String,
    }

    #[derive(Deserialize)]
    struct B {
        field: String,
    }

    let a = A { field: "This was a mistake".to_string() };
    let b: B = serde_cast!(&a);

    assert_eq!(a.field, b.field);
}