serde_magnus

serde_magnus converts between Rust and Ruby data structures using [Serde] and [Magnus].

Quick links

Usage

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;

[derive(Serialize, Deserialize, PartialEq, Debug)]

struct Post { title: String, content: String, author: Author, tags: Vec }

[derive(Serialize, Deserialize, PartialEq, Debug)]

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 ); ```

Requirements

serde_magnus requires Rust 1.51+ and Ruby 2.6+.

License

serde_magnus is released under the terms of the MIT License. See LICENSE for details.