diff --git a/serde/Cargo.toml b/serde/Cargo.toml index 9dff8d8b..2932e064 100644 --- a/serde/Cargo.toml +++ b/serde/Cargo.toml @@ -71,7 +71,6 @@ alloc = ["serde_core/alloc"] # Be sure that this is what you want before enabling this feature. rc = ["serde_core/rc"] -# Provide impls for Result. Enabling these impls allows for serialization -# and deserialization of Result types, which may be useful in certain contexts -# but could lead to confusion if ? or unwrap are overused. +# Provide impls for Result. Convenient in some contexts but can lead to +# confusion if ? or unwrap are used incautiously. result = ["serde_core/result"] diff --git a/serde_core/Cargo.toml b/serde_core/Cargo.toml index a2245b55..79aca909 100644 --- a/serde_core/Cargo.toml +++ b/serde_core/Cargo.toml @@ -4,13 +4,12 @@ version = "1.0.219" authors = ["Erick Tryzelaar ", "David Tolnay "] build = "build.rs" categories = ["encoding", "no-std", "no-std::no-alloc"] -description = "Core functionalities and abstractions for the Serde serialization/deserialization framework" +description = "Serde traits only, with no support for derive -- use the `serde` crate instead" documentation = "https://docs.rs/serde_core" 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" @@ -56,7 +55,6 @@ alloc = [] # Be sure that this is what you want before enabling this feature. rc = [] -# Provide impls for Result. Enabling these impls allows for serialization -# and deserialization of Result types, which may be useful in certain contexts -# but could lead to confusion if ? or unwrap are overused. +# Provide impls for Result. Convenient in some contexts but can lead to +# confusion if ? or unwrap are used incautiously. result = [] 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 6c704c73..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_core) -- [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_core/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 5c7bc6fe..a409d286 100644 --- a/serde_core/src/lib.rs +++ b/serde_core/src/lib.rs @@ -1,22 +1,23 @@ -//! # 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. -#![doc(html_root_url = "https://docs.rs/serde_core/1.0.219")] +#![doc(html_root_url = "https://docs.rs/serde/1.0.219")] // Support using Serde without the standard library! #![cfg_attr(not(feature = "std"), no_std)] // Show which crate feature enables conditionally compiled APIs in documentation.