serde_magnus 0.2.2

Serde integration for Magnus
Documentation
use magnus::{eval, Error, Integer, RArray, RHash, QNIL};
use serde::Deserialize;
use serde_magnus::deserialize;

#[derive(Deserialize, PartialEq, Debug)]
struct A;

#[derive(Deserialize, PartialEq, Debug)]
struct B(u64);

#[derive(Deserialize, PartialEq, Debug)]
struct C(u64, bool, String);

#[derive(Deserialize, PartialEq, Debug)]
struct D {
    message: String,
}

#[test]
fn test_deserializing_structs() -> Result<(), Error> {
    let _cleanup = unsafe { magnus::embed::init() };

    assert_eq!(A, deserialize(QNIL)?);

    let input = Integer::from_u64(123);
    let output: B = deserialize(input)?;
    assert_eq!(B(123), output);

    let input: RArray = eval!("[ 123, true, 'Hello, world!' ]")?;
    let output: C = deserialize(input)?;
    assert_eq!(C(123, true, "Hello, world!".into()), output);

    let input: RHash = eval!("{ message: 'Hello, world!' }")?;
    let output: D = deserialize(input)?;
    assert_eq!(
        D {
            message: "Hello, world!".into()
        },
        output
    );

    Ok(())
}