2023-07-28 00:32:00 -05:00
|
|
|
# Serde   [![Build Status]][actions] [![Latest Version]][crates.io] [![serde: rustc 1.20+]][Rust 1.20] [![serde_derive: rustc 1.56+]][Rust 1.56]
|
2017-04-16 22:44:27 -05:00
|
|
|
|
2022-12-15 19:17:05 -06:00
|
|
|
[Build Status]: https://img.shields.io/github/actions/workflow/status/serde-rs/serde/ci.yml?branch=master
|
2020-05-05 18:41:40 -05:00
|
|
|
[actions]: https://github.com/serde-rs/serde/actions?query=branch%3Amaster
|
2017-04-16 22:44:27 -05:00
|
|
|
[Latest Version]: https://img.shields.io/crates/v/serde.svg
|
|
|
|
[crates.io]: https://crates.io/crates/serde
|
2023-07-28 00:32:00 -05:00
|
|
|
[serde: rustc 1.20+]: https://img.shields.io/badge/serde-rustc_1.20+-lightgray.svg
|
2023-03-17 19:23:33 -05:00
|
|
|
[serde_derive: rustc 1.56+]: https://img.shields.io/badge/serde_derive-rustc_1.56+-lightgray.svg
|
2023-07-28 00:32:00 -05:00
|
|
|
[Rust 1.20]: https://blog.rust-lang.org/2017/08/31/Rust-1.20.html
|
2023-03-17 19:23:33 -05:00
|
|
|
[Rust 1.56]: https://blog.rust-lang.org/2021/10/21/Rust-1.56.0.html
|
2014-09-07 03:30:58 -05:00
|
|
|
|
2016-08-18 00:01:48 -05:00
|
|
|
**Serde is a framework for *ser*ializing and *de*serializing Rust data structures efficiently and generically.**
|
2014-09-07 03:30:58 -05:00
|
|
|
|
2016-08-18 00:01:48 -05:00
|
|
|
---
|
2015-04-01 00:16:15 -05:00
|
|
|
|
2016-08-18 00:01:48 -05:00
|
|
|
You may be looking for:
|
2015-08-09 18:37:01 -05:00
|
|
|
|
2016-08-18 16:08:05 -05:00
|
|
|
- [An overview of Serde](https://serde.rs/)
|
|
|
|
- [Data formats supported by Serde](https://serde.rs/#data-formats)
|
2018-10-04 01:14:49 -05:00
|
|
|
- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/derive.html)
|
2016-08-18 16:08:05 -05:00
|
|
|
- [Examples](https://serde.rs/examples.html)
|
2022-12-18 13:45:23 -06:00
|
|
|
- [API documentation](https://docs.rs/serde)
|
2016-12-22 20:52:37 -06:00
|
|
|
- [Release notes](https://github.com/serde-rs/serde/releases)
|
2015-08-09 18:37:01 -05:00
|
|
|
|
2016-08-18 00:01:48 -05:00
|
|
|
## Serde in action
|
2016-07-07 16:31:24 -05:00
|
|
|
|
2017-10-31 23:47:30 -05:00
|
|
|
<details>
|
|
|
|
<summary>
|
|
|
|
Click to show Cargo.toml.
|
2019-01-18 02:29:56 -06:00
|
|
|
<a href="https://play.rust-lang.org/?edition=2018&gist=72755f28f99afc95e01d63174b28c1f5" target="_blank">Run this code in the playground.</a>
|
2017-10-31 23:47:30 -05:00
|
|
|
</summary>
|
2017-10-31 14:20:23 -05:00
|
|
|
|
|
|
|
```toml
|
|
|
|
[dependencies]
|
2017-10-31 23:47:30 -05:00
|
|
|
|
|
|
|
# The core APIs, including the Serialize and Deserialize traits. Always
|
2019-01-18 02:29:56 -06:00
|
|
|
# required when using Serde. The "derive" feature is only required when
|
|
|
|
# using #[derive(Serialize, Deserialize)] to make Serde work with structs
|
|
|
|
# and enums defined in your crate.
|
|
|
|
serde = { version = "1.0", features = ["derive"] }
|
2017-10-31 23:47:30 -05:00
|
|
|
|
|
|
|
# Each data format lives in its own crate; the sample code below uses JSON
|
|
|
|
# but you may be using a different one.
|
2017-10-31 14:20:23 -05:00
|
|
|
serde_json = "1.0"
|
|
|
|
```
|
|
|
|
|
2017-10-31 23:47:30 -05:00
|
|
|
</details>
|
|
|
|
<p></p>
|
2017-10-31 14:20:23 -05:00
|
|
|
|
2016-07-07 16:31:24 -05:00
|
|
|
```rust
|
2023-07-06 17:45:53 -05:00
|
|
|
use serde::{Deserialize, Serialize};
|
2016-07-07 16:31:24 -05:00
|
|
|
|
|
|
|
#[derive(Serialize, Deserialize, Debug)]
|
|
|
|
struct Point {
|
|
|
|
x: i32,
|
|
|
|
y: i32,
|
|
|
|
}
|
|
|
|
|
|
|
|
fn main() {
|
|
|
|
let point = Point { x: 1, y: 2 };
|
|
|
|
|
2016-08-18 00:01:48 -05:00
|
|
|
// Convert the Point to a JSON string.
|
2016-07-07 16:31:24 -05:00
|
|
|
let serialized = serde_json::to_string(&point).unwrap();
|
2015-04-01 23:59:37 -05:00
|
|
|
|
2016-08-18 00:01:48 -05:00
|
|
|
// Prints serialized = {"x":1,"y":2}
|
|
|
|
println!("serialized = {}", serialized);
|
2016-02-26 13:03:06 -06:00
|
|
|
|
2016-08-18 00:01:48 -05:00
|
|
|
// Convert the JSON string back to a Point.
|
2016-02-26 13:03:06 -06:00
|
|
|
let deserialized: Point = serde_json::from_str(&serialized).unwrap();
|
|
|
|
|
2016-08-18 00:01:48 -05:00
|
|
|
// Prints deserialized = Point { x: 1, y: 2 }
|
|
|
|
println!("deserialized = {:?}", deserialized);
|
2016-02-26 13:03:06 -06:00
|
|
|
}
|
2015-04-01 00:16:15 -05:00
|
|
|
```
|
2015-08-11 09:00:59 -05:00
|
|
|
|
2016-08-18 09:56:41 -05:00
|
|
|
## Getting help
|
|
|
|
|
2020-05-10 01:34:38 -05:00
|
|
|
Serde is one of the most widely used Rust libraries so any place that Rustaceans
|
|
|
|
congregate will be able to help you out. For chat, consider trying the
|
2022-01-22 13:21:08 -06:00
|
|
|
[#rust-questions] or [#rust-beginners] channels of the unofficial community
|
|
|
|
Discord (invite: <https://discord.gg/rust-lang-community>), the [#rust-usage] or
|
|
|
|
[#beginners] channels of the official Rust Project Discord (invite:
|
|
|
|
<https://discord.gg/rust-lang>), or the [#general][zulip] stream in Zulip. For
|
|
|
|
asynchronous, consider the [\[rust\] tag on StackOverflow][stackoverflow], the
|
|
|
|
[/r/rust] subreddit which has a pinned weekly easy questions post, or the Rust
|
|
|
|
[Discourse forum][discourse]. It's acceptable to file a support issue in this
|
|
|
|
repo but they tend not to get as many eyes as any of the above and may get
|
|
|
|
closed without a response after some time.
|
|
|
|
|
|
|
|
[#rust-questions]: https://discord.com/channels/273534239310479360/274215136414400513
|
|
|
|
[#rust-beginners]: https://discord.com/channels/273534239310479360/273541522815713281
|
2020-05-10 01:34:38 -05:00
|
|
|
[#rust-usage]: https://discord.com/channels/442252698964721669/443150878111694848
|
2022-01-22 13:21:08 -06:00
|
|
|
[#beginners]: https://discord.com/channels/442252698964721669/448238009733742612
|
2020-05-10 01:34:38 -05:00
|
|
|
[zulip]: https://rust-lang.zulipchat.com/#narrow/stream/122651-general
|
|
|
|
[stackoverflow]: https://stackoverflow.com/questions/tagged/rust
|
|
|
|
[/r/rust]: https://www.reddit.com/r/rust
|
|
|
|
[discourse]: https://users.rust-lang.org
|
2016-08-18 09:56:41 -05:00
|
|
|
|
2019-05-18 19:35:18 -05:00
|
|
|
<br>
|
2016-05-01 08:30:35 -05:00
|
|
|
|
2019-05-18 19:35:18 -05:00
|
|
|
#### License
|
2016-05-01 08:30:35 -05:00
|
|
|
|
2019-05-18 19:35:18 -05:00
|
|
|
<sup>
|
|
|
|
Licensed under either of <a href="LICENSE-APACHE">Apache License, Version
|
|
|
|
2.0</a> or <a href="LICENSE-MIT">MIT license</a> at your option.
|
|
|
|
</sup>
|
2016-05-01 08:30:35 -05:00
|
|
|
|
2019-05-18 19:35:18 -05:00
|
|
|
<br>
|
2015-08-11 09:00:59 -05:00
|
|
|
|
2019-05-18 19:35:18 -05:00
|
|
|
<sub>
|
2016-08-18 00:01:48 -05:00
|
|
|
Unless you explicitly state otherwise, any contribution intentionally submitted
|
|
|
|
for inclusion in Serde by you, as defined in the Apache-2.0 license, shall be
|
|
|
|
dual licensed as above, without any additional terms or conditions.
|
2019-05-18 19:35:18 -05:00
|
|
|
</sub>
|