oapi 0.1.2

OpenApi document parser
Documentation
use super::*;
use oapi::{OApiError, OApiExtensionExtractor};
use oapi_derive::OApiCheckInner;
use sppparse::Sparsable;

#[derive(Debug, PartialEq, Serialize, Deserialize, Sparsable, OApiCheckInner)]
#[serde(rename_all = "camelCase")]
pub struct OApiDummyExt {
    first_name: String,
    last_name: String,
}

#[test]
fn ok() {
    let doc: oapi::OApi = oapi::OApi::new(
        SparseRoot::new_from_file(PathBuf::from(oapi_test_path!(
            "tests/documents/test_docs/extensions.yml"
        )))
        .expect("to parse the openapi"),
    );

    let ext: OApiDummyExt = doc
        .root_get()
        .unwrap()
        .oapi_extract_ext(doc.doc(), "x-toto")
        .unwrap();
    assert_eq!(ext.first_name.as_str(), "hello", "first name mismatch");
    assert_eq!(ext.last_name.as_str(), "world", "last name mismatch");
}

#[test]
fn bad_format() {
    let doc: oapi::OApi = oapi::OApi::new(
        SparseRoot::new_from_file(PathBuf::from(oapi_test_path!(
            "tests/documents/test_docs/extensions.yml"
        )))
        .expect("to parse the openapi"),
    );

    let ext: OApiError = doc
        .root_get()
        .unwrap()
        .info()
        .oapi_extract_ext::<OApiDummyExt>(doc.doc(), "x-toto")
        .expect_err("Shoulve failed validation");
    match ext {
        OApiError::SppparseError(sppparse::SparseError::SerdeJson(_)) => (),
        _ => panic!("Wrong error type, was expecting serde json error"),
    };
}

#[test]
fn bad_name() {
    let doc: oapi::OApi = oapi::OApi::new(
        SparseRoot::new_from_file(PathBuf::from(oapi_test_path!(
            "tests/documents/test_docs/extensions.yml"
        )))
        .expect("to parse the openapi"),
    );

    let ext: OApiError = doc
        .root_get()
        .unwrap()
        .oapi_extract_ext::<OApiDummyExt>(doc.doc(), "x-hello")
        .expect_err("Shoulve failed validation");
    match ext {
        OApiError::NoExtKey(s) => assert_eq!(s.as_str(), "x-hello", "key mismatch"),
        _ => panic!("Wrong error type, was expecting serde json error"),
    };
}