serde_magnus 0.1.2

Serde integration for Magnus
Documentation
use magnus::{Error, Integer, RHash, RString, Symbol, Value};
use serde::Serialize;
use serde_magnus::serialize;

#[derive(Serialize)]
struct A;

#[derive(Serialize)]
struct B(u64);

#[derive(Serialize)]
struct C {
    message: String,
}

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

    let output: Value = serialize(&A)?;
    assert!(output.is_nil());

    let output: Integer = serialize(&B(123))?;
    assert_eq!(123, output.to_u64()?);

    let output: RHash = serialize(&C {
        message: "Hello, world!".into(),
    })?;
    assert_eq!(1, output.len());

    let message: RString = output.lookup(Symbol::new("message"))?;
    assert_eq!("Hello, world!", message.to_string()?);

    Ok(())
}