Documentation
use crate::openapi::{ServerBuilder, ServerVariableBuilder};

macro_rules! test_fn {
    ($name:ident: $schema:expr; $expected:literal) => {
        #[test]
        fn $name() {
            let value = serde_json::to_value($schema).unwrap();
            let expected_value: serde_json::Value = serde_json::from_str($expected).unwrap();
            assert_eq!(
                value,
                expected_value,
                "testing serializing \"{}\": \nactual:\n{}\nexpected:\n{}",
                stringify!($name),
                value,
                expected_value
            );
            println!("{}", &serde_json::to_string_pretty(&$schema).unwrap());
        }
    };
}

test_fn! {
create_server_with_builder_and_variable_substitution:
ServerBuilder::new().url("/api/{version}/{username}")
    .parameter("version", ServerVariableBuilder::new()
        .enum_values(Some(["v1", "v2"]))
        .description(Some("api version"))
        .default_value("v1"))
    .parameter("username", ServerVariableBuilder::new()
        .default_value("the_user")).build();
r###"{
  "url": "/api/{version}/{username}",
  "variables": {
      "version": {
          "enum": ["v1", "v2"],
          "default": "v1",
          "description": "api version"
      },
      "username": {
          "default": "the_user"
      }
  }
}"###
}