serde_magnus
serde_magnus
converts between Rust and Ruby data structures using [Serde] and [Magnus].
Quick links
The [serde_magnus::serialize
] function converts from a Rust type implementing the
[serde::Serialize
] trait into a Ruby equivalent.
```rust use serde::{Serialize, Deserialize}; use magnus::{eval, Value}; use serde_magnus::serialize;
struct Post {
title: String,
content: String,
author: Author,
tags: Vec
struct Author { name: String, email_address: String }
let post = Post { title: "Spring carnival planning update".into(), content: "Here's what's new.".into(), author: Author { name: "Martha".into(), email_address: "martha@example.com".into() }, tags: vec![ "carnival".into(), "update".into() ] };
let post: Value = serialize(&post)?;
assert!(eval!( r#" post == { title: "Spring carnival planning update", content: "Here's what's new.", author: { name: "Martha", email_address: "martha@example.com" }, tags: ["carnival", "update"] } "#, post )?); ```
[serde_magnus::deserialize
] converts from a Ruby value to a Rust type implementing
[serde::Deserialize
].
```rust use magnus::RHash; use serde_magnus::deserialize;
let post: RHash = eval!(r#" { title: "Spring carnival planning update", content: "Here's what's new.", author: { name: "Martha", email_address: "martha@example.com" }, tags: ["carnival", "update"] } "#)?;
let post: Post = deserialize(post)?;
asserteq!( Post { title: "Spring carnival planning update".into(), content: "Here's what's new.".into(), author: Author { name: "Martha".into(), emailaddress: "martha@example.com".into(), }, tags: vec![ "carnival".into(), "update".into() ] }, post ); ```
serde_magnus
requires Rust 1.51+ and Ruby 2.6+.
serde_magnus
is released under the terms of the MIT License. See LICENSE
for details.