# `serde-bool` [![crates.io](https://img.shields.io/crates/v/serde-bool?label=latest)](https://crates.io/crates/serde-bool) [![Documentation](https://docs.rs/serde-bool/badge.svg?version=0.1.3)](https://docs.rs/serde-bool/0.1.3) [![dependency status](https://deps.rs/crate/serde-bool/0.1.3/status.svg)](https://deps.rs/crate/serde-bool/0.1.3) ![MIT or Apache 2.0 licensed](https://img.shields.io/crates/l/serde-bool.svg)
[![CI](https://github.com/x52dev/serde-bool/actions/workflows/ci.yml/badge.svg)](https://github.com/x52dev/serde-bool/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/x52dev/serde-bool/branch/main/graph/badge.svg)](https://codecov.io/gh/x52dev/serde-bool) ![Version](https://img.shields.io/badge/rustc-1.65+-ab6000.svg) [![Download](https://img.shields.io/crates/d/serde-bool.svg)](https://crates.io/crates/serde-bool) Single value, true or false, boolean deserializers. ## Examples Supporting serde untagged enums where only one boolean value is valid, allowing fallthrough to the next variant. Avoids need to wrap all fields in `Option<_>` just in case feature is disabled. ```rust #[derive(Debug, serde::Deserialize)] struct Config { feature: FeatureConfig, } #[derive(Debug, serde::Deserialize)] #[serde(untagged)] enum FeatureConfig { Disabled { enabled: serde_bool::False }, Enabled { #[serde(default)] enabled: serde_bool::True, key: String, secret: String, } } // disabled variant is matched let config = toml::from_str::(r#" [feature] enabled = false "#).unwrap(); assert!(matches!(config.feature, FeatureConfig::Disabled { .. })); // if the type used `enabled: bool`, this would cause issues and require Option<_> wrappers plus // further validation... instead an error is returned immediately regarding the missing fields let config = toml::from_str::(r#" [feature] enabled = true "#).unwrap_err(); // using a `#[serde(default)]` annotation makes `enabled = true` optional here let config = toml::from_str::(r#" [feature] key = "foo" secret = "bar" "#).unwrap(); assert!(matches!(config.feature, FeatureConfig::Enabled { .. })); // extra keys can exists in the disabled case, but as usual will not be captured let config = toml::from_str::(r#" [feature] enabled = false key = "foo" secret = "bar" "#).unwrap(); assert!(matches!(config.feature, FeatureConfig::Disabled { .. })); ```