use std::collections::BTreeMap;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, PartialEq, Default, Deserialize, Serialize)]
#[serde(rename_all = "camelCase")]
pub struct Discriminator {
pub property_name: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub mapping: Option<BTreeMap<String, String>>,
}
#[cfg(all(test, feature = "yaml-spec"))]
mod tests {
use super::*;
#[test]
fn discriminator_property_name_parsed_correctly() {
let spec = "propertyName: testName";
let discriminator = yaml_serde::from_str::<Discriminator>(spec).unwrap();
assert_eq!("testName", discriminator.property_name);
assert!(discriminator.mapping.is_none());
}
#[test]
fn discriminator_mapping_parsed_correctly() {
let spec = indoc::indoc! {"
propertyName: petType
mapping:
dog: '#/components/schemas/Dog'
cat: '#/components/schemas/Cat'
monster: 'https://gigantic-server.com/schemas/Monster/schema.json'
"};
let discriminator = yaml_serde::from_str::<Discriminator>(spec).unwrap();
assert_eq!("petType", discriminator.property_name);
let mapping = discriminator.mapping.unwrap();
assert_eq!("#/components/schemas/Dog", mapping.get("dog").unwrap());
assert_eq!("#/components/schemas/Cat", mapping.get("cat").unwrap());
assert_eq!(
"https://gigantic-server.com/schemas/Monster/schema.json",
mapping.get("monster").unwrap()
);
}
}