pub fn deserialize_untagged_enum_case_insensitive<'de, T, D>(
    deserializer: D
) -> Result<T, D::Error>where
    T: Deserialize<'de>,
    D: Deserializer<'de>,
Expand description

Serde case-insensitive deserializer for an untagged enum.

This function converts values to lowercase before deserializing as the enum. Requires the #[serde(rename_all = "lowercase")] attribute to be set on the enum.

Example

In example below, the following JSON values all deserialize to GroceryBasket { fruit_item: Fruit::Banana }:

  • {"fruit_item": "banana"}
  • {"fruit_item": "BANANA"}
  • {"fruit_item": "Banana"}

Note: this example does not compile automatically due to Rust issue #29286.

use serde::Deserialize;

#[derive(Deserialize)]
#[serde(rename_all = "lowercase")]
enum Fruit {
    Apple,
    Banana,
    Orange,
}

#[derive(Deserialize)]
struct GroceryBasket {
    #[serde(deserialize_with = "helpers::deserialize_untagged_enum_case_insensitive")]
    fruit_item: Fruit,
}