use enumset::{EnumSet, EnumSetType, enum_set};
use std::fmt::Display;
#[derive(Debug, Clone, PartialEq)]
pub struct Error {
pub errors: Vec<String>,
}
impl Display for Error {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
writeln!(f, "{} errors found:", self.errors.len())?;
for error in &self.errors {
writeln!(f, "- {error}")?;
}
Ok(())
}
}
#[derive(EnumSetType, Debug)]
pub enum Options {
IgnoreMissingTags,
IgnoreExternalReferences,
IgnoreInvalidUrls,
IgnoreNonUniqOperationIDs,
IgnoreUnusedPathItems,
IgnoreUnusedTags,
IgnoreUnusedSchemas,
IgnoreUnusedParameters,
IgnoreUnusedResponses,
IgnoreUnusedServerVariables,
IgnoreUnusedExamples,
IgnoreUnusedRequestBodies,
IgnoreUnusedHeaders,
IgnoreUnusedSecuritySchemes,
IgnoreUnusedLinks,
IgnoreUnusedCallbacks,
IgnoreEmptyInfoTitle,
IgnoreEmptyInfoVersion,
IgnoreEmptyResponseDescription,
IgnoreEmptyExternalDocumentationUrl,
}
pub const IGNORE_UNUSED: EnumSet<Options> = enum_set!(
Options::IgnoreUnusedTags
| Options::IgnoreUnusedSchemas
| Options::IgnoreUnusedParameters
| Options::IgnoreUnusedResponses
| Options::IgnoreUnusedServerVariables
| Options::IgnoreUnusedExamples
| Options::IgnoreUnusedRequestBodies
| Options::IgnoreUnusedHeaders
| Options::IgnoreUnusedSecuritySchemes
| Options::IgnoreUnusedLinks
| Options::IgnoreUnusedCallbacks
);
pub const IGNORE_EMPTY_REQUIRED_FIELDS: EnumSet<Options> = enum_set!(
Options::IgnoreEmptyInfoTitle
| Options::IgnoreEmptyInfoVersion
| Options::IgnoreEmptyResponseDescription
| Options::IgnoreEmptyExternalDocumentationUrl
);
impl Options {
pub fn new() -> EnumSet<Options> {
EnumSet::empty() | Options::IgnoreUnusedPathItems
}
pub fn empty() -> EnumSet<Options> {
EnumSet::empty()
}
pub fn only(&self) -> EnumSet<Options> {
EnumSet::only(*self)
}
}
pub trait Validate {
fn validate(&self, options: EnumSet<Options>) -> Result<(), Error>;
}