oasert 0.1.4

A library for verifying in-flight requests against a provided OpenAPI 3.1.x or 3.0.x specification.
Documentation
use jsonschema::Draft;
use std::fmt::{Display, Formatter};
use std::str::FromStr;

pub enum OpenApiVersion {
    V30x,
    V31x,
}

impl FromStr for OpenApiVersion {
    type Err = VersionError;

    fn from_str(s: &str) -> Result<Self, Self::Err> {
        if s.starts_with("3.1") {
            Ok(OpenApiVersion::V31x)
        } else if s.starts_with("3.0") {
            Ok(OpenApiVersion::V30x)
        } else {
            Err(VersionError::unsupported_version(s))
        }
    }
}

impl OpenApiVersion {
    pub(crate) fn get_draft(&self) -> Draft {
        match self {
            OpenApiVersion::V30x => Draft::Draft4,
            OpenApiVersion::V31x => Draft::Draft202012,
        }
    }
}

#[derive(Debug)]
pub enum VersionError {
    UnsupportedVersion(String),
}

impl VersionError {
    pub(crate) fn unsupported_version<T>(version: &T) -> Self
    where
        T: ToString + ?Sized,
    {
        VersionError::UnsupportedVersion(version.to_string())
    }
}

impl Display for VersionError {
    fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
        match self {
            VersionError::UnsupportedVersion(version) => {
                write!(f, "Unsupported version: {}", version)
            }
        }
    }
}

impl std::error::Error for VersionError {}