From 51f8b0c52de6654c955c8ef4146602f56f0503bb Mon Sep 17 00:00:00 2001 From: David Tolnay Date: Sat, 13 Sep 2025 08:59:39 -0700 Subject: [PATCH] Rewrite serde_core readme --- serde_core/Cargo.toml | 1 - serde_core/README.md | 120 +++------------------------------------- serde_core/crates-io.md | 42 -------------- serde_core/src/lib.rs | 19 ++++--- 4 files changed, 19 insertions(+), 163 deletions(-) delete mode 100644 serde_core/crates-io.md diff --git a/serde_core/Cargo.toml b/serde_core/Cargo.toml index a2245b55..b00ad51e 100644 --- a/serde_core/Cargo.toml +++ b/serde_core/Cargo.toml @@ -10,7 +10,6 @@ edition = "2021" homepage = "https://serde.rs" keywords = ["serde", "serialization", "no_std"] license = "MIT OR Apache-2.0" -readme = "crates-io.md" repository = "https://github.com/serde-rs/serde" rust-version = "1.56" diff --git a/serde_core/README.md b/serde_core/README.md index eda660c2..7d5460c7 100644 --- a/serde_core/README.md +++ b/serde_core/README.md @@ -1,114 +1,12 @@ -# Serde   [![Build Status]][actions] [![Latest Version]][crates.io] [![serde msrv]][Rust 1.56] [![serde_derive msrv]][Rust 1.61] +The `serde_core` crate contains Serde's trait definitions with **no support for +#\[derive()\]**. -[Build Status]: https://img.shields.io/github/actions/workflow/status/serde-rs/serde/ci.yml?branch=master -[actions]: https://github.com/serde-rs/serde/actions?query=branch%3Amaster -[Latest Version]: https://img.shields.io/crates/v/serde.svg -[crates.io]: https://crates.io/crates/serde -[serde msrv]: https://img.shields.io/crates/msrv/serde.svg?label=serde%20msrv&color=lightgray -[serde_derive msrv]: https://img.shields.io/crates/msrv/serde_derive.svg?label=serde_derive%20msrv&color=lightgray -[Rust 1.56]: https://blog.rust-lang.org/2021/10/21/Rust-1.56.0.html -[Rust 1.61]: https://blog.rust-lang.org/2022/05/19/Rust-1.61.0.html +In crates that derive an implementation of `Serialize` or `Deserialize`, you +must depend on the [`serde`] crate, not `serde_core`. -**Serde is a framework for *ser*ializing and *de*serializing Rust data structures efficiently and generically.** +In crates that handwrite implementations of Serde traits, or only use them as +trait bounds, depending on `serde_core` is permitted. But `serde` re-exports all +of these traits and can be used for this use case too. If in doubt, disregard +`serde_core` and always use `serde`. ---- - -You may be looking for: - -- [An overview of Serde](https://serde.rs/) -- [Data formats supported by Serde](https://serde.rs/#data-formats) -- [Setting up `#[derive(Serialize, Deserialize)]`](https://serde.rs/derive.html) -- [Examples](https://serde.rs/examples.html) -- [API documentation](https://docs.rs/serde) -- [Release notes](https://github.com/serde-rs/serde/releases) - -## Serde in action - -
- -Click to show Cargo.toml. -Run this code in the playground. - - -```toml -[dependencies] - -# The core APIs, including the Serialize and Deserialize traits. Always -# 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"] } - -# Each data format lives in its own crate; the sample code below uses JSON -# but you may be using a different one. -serde_json = "1.0" -``` - -
-

- -```rust -use serde::{Deserialize, Serialize}; - -#[derive(Serialize, Deserialize, Debug)] -struct Point { - x: i32, - y: i32, -} - -fn main() { - let point = Point { x: 1, y: 2 }; - - // Convert the Point to a JSON string. - let serialized = serde_json::to_string(&point).unwrap(); - - // Prints serialized = {"x":1,"y":2} - println!("serialized = {}", serialized); - - // Convert the JSON string back to a Point. - let deserialized: Point = serde_json::from_str(&serialized).unwrap(); - - // Prints deserialized = Point { x: 1, y: 2 } - println!("deserialized = {:?}", deserialized); -} -``` - -## Getting help - -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 -[#rust-questions] or [#rust-beginners] channels of the unofficial community -Discord (invite: ), the [#rust-usage] or -[#beginners] channels of the official Rust Project Discord (invite: -), 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 -[#rust-usage]: https://discord.com/channels/442252698964721669/443150878111694848 -[#beginners]: https://discord.com/channels/442252698964721669/448238009733742612 -[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 - -
- -#### License - - -Licensed under either of Apache License, Version -2.0 or MIT license at your option. - - -
- - -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. - +[`serde`]: https://crates.io/crates/serde diff --git a/serde_core/crates-io.md b/serde_core/crates-io.md deleted file mode 100644 index e9eb77a0..00000000 --- a/serde_core/crates-io.md +++ /dev/null @@ -1,42 +0,0 @@ - - -**Serde Core is a collection of core functionalities and abstractions for Serde, a framework for *ser*ializing and *de*serializing Rust data structures efficiently and generically.** - ---- - -Serde Core exposes core traits and utilities for interacting with Serde's data model. -It is intended to be consumed by Serde's data formats and other crates that implement the Serde traits by hand. - -If you are looking to use Serde in your library/application to simply serialize and deserialize data, you most likely want to use [Serde](https://crates.io/crates/serde) directly. -Serde Core does _not_ offer any convenience functions for automatically implementing `Serialize` or `Deserialize` via a `#[derive]` macro. - -You may be looking for: - -- [API documentation](https://docs.rs/serde) -- [An overview of Serde](https://serde.rs/) -- [Data formats supported by Serde](https://serde.rs/#data-formats) -- [Examples](https://serde.rs/examples.html) -- [Release notes](https://github.com/serde-rs/serde/releases) - -## Getting help - -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 -[#rust-questions] or [#rust-beginners] channels of the unofficial community -Discord (invite: ), the [#rust-usage] -or [#beginners] channels of the official Rust Project Discord (invite: -), 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 -[#rust-usage]: https://discord.com/channels/442252698964721669/443150878111694848 -[#beginners]: https://discord.com/channels/442252698964721669/448238009733742612 -[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 diff --git a/serde_core/src/lib.rs b/serde_core/src/lib.rs index bef42302..a409d286 100644 --- a/serde_core/src/lib.rs +++ b/serde_core/src/lib.rs @@ -1,18 +1,19 @@ -//! # Serde Core -//! //! Serde is a framework for ***ser***ializing and ***de***serializing Rust data //! structures efficiently and generically. //! -//! `serde_core` provides essential traits and functions that form the backbone of Serde. It is intended for use by data format implementations; -//! while it is possible to depend on `serde` crate in a crate that implements a data format, -//! doing so means that the build of data format crate cannot start until serde_derive is done building (if that feature is enabled). -//! Thus, implementing a data format in terms of serde_core and not of serde should improve compile times of users of your data format. +//! The `serde_core` crate contains Serde's trait definitions with **no support +//! for #\[derive()\]**. //! -//! Alternatively, as an user of data formats you could use `serde_core` instead of `serde` if you do not intend to enable derive feature on `serde`. +//! In crates that derive an implementation of `Serialize` or `Deserialize`, you +//! must depend on the [`serde`] crate, not `serde_core`. //! -//! If you're still unsure which crate to use, favor `serde` for the most straightforward experience. -//! For more detailed information and usage examples, refer to Serde's documentation at . +//! In crates that handwrite implementations of Serde traits, or only use them +//! as trait bounds, depending on `serde_core` is permitted. But `serde` +//! re-exports all of these traits and can be used for this use case too. If in +//! doubt, disregard `serde_core` and always use `serde`. //! +//! [`serde`]: https://crates.io/crates/serde + //////////////////////////////////////////////////////////////////////////////// // Serde types in rustdoc of other crates get linked to here.