#![cfg_attr(coverage_nightly, coverage(off))]
use clap::ValueEnum;
use serde::{Deserialize, Serialize};
use std::fmt;
#[derive(Clone, Debug, ValueEnum, PartialEq)]
pub enum ExplainLevel {
Brief,
Detailed,
Verbose,
}
impl fmt::Display for ExplainLevel {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ExplainLevel::Brief => write!(f, "brief"),
ExplainLevel::Detailed => write!(f, "detailed"),
ExplainLevel::Verbose => write!(f, "verbose"),
}
}
}
#[derive(Clone, Copy, Debug, ValueEnum, PartialEq)]
pub enum SearchScope {
Functions,
Types,
Variables,
All,
}
impl fmt::Display for SearchScope {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SearchScope::Functions => write!(f, "functions"),
SearchScope::Types => write!(f, "types"),
SearchScope::Variables => write!(f, "variables"),
SearchScope::All => write!(f, "all"),
}
}
}
#[derive(Clone, Debug, ValueEnum, PartialEq)]
pub enum SymbolTypeFilter {
Functions,
Classes,
Types,
Variables,
Modules,
All,
}
impl fmt::Display for SymbolTypeFilter {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SymbolTypeFilter::Functions => write!(f, "functions"),
SymbolTypeFilter::Classes => write!(f, "classes"),
SymbolTypeFilter::Types => write!(f, "types"),
SymbolTypeFilter::Variables => write!(f, "variables"),
SymbolTypeFilter::Modules => write!(f, "modules"),
SymbolTypeFilter::All => write!(f, "all"),
}
}
}
#[derive(Clone, Debug, ValueEnum, PartialEq)]
pub enum PropertyTypeFilter {
MemorySafety,
ThreadSafety,
DataRaceFreeze,
Termination,
FunctionalCorrectness,
ResourceBounds,
All,
}
impl PropertyTypeFilter {
fn as_str(&self) -> &'static str {
match self {
PropertyTypeFilter::MemorySafety => "memory-safety",
PropertyTypeFilter::ThreadSafety => "thread-safety",
PropertyTypeFilter::DataRaceFreeze => "data-race-freeze",
PropertyTypeFilter::Termination => "termination",
PropertyTypeFilter::FunctionalCorrectness => "functional-correctness",
PropertyTypeFilter::ResourceBounds => "resource-bounds",
PropertyTypeFilter::All => "all",
}
}
}
impl fmt::Display for PropertyTypeFilter {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.as_str())
}
}
#[derive(Clone, Debug, ValueEnum, PartialEq)]
pub enum VerificationMethodFilter {
FormalProof,
ModelChecking,
StaticAnalysis,
AbstractInterpretation,
BorrowChecker,
All,
}
impl fmt::Display for VerificationMethodFilter {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
VerificationMethodFilter::FormalProof => write!(f, "formal-proof"),
VerificationMethodFilter::ModelChecking => write!(f, "model-checking"),
VerificationMethodFilter::StaticAnalysis => write!(f, "static-analysis"),
VerificationMethodFilter::AbstractInterpretation => {
write!(f, "abstract-interpretation")
}
VerificationMethodFilter::BorrowChecker => write!(f, "borrow-checker"),
VerificationMethodFilter::All => write!(f, "all"),
}
}
}
#[derive(Clone, Debug, ValueEnum, PartialEq, PartialOrd, Ord, Eq)]
pub enum SatdSeverity {
Low,
Medium,
High,
Critical,
}
impl fmt::Display for SatdSeverity {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
SatdSeverity::Low => write!(f, "low"),
SatdSeverity::Medium => write!(f, "medium"),
SatdSeverity::High => write!(f, "high"),
SatdSeverity::Critical => write!(f, "critical"),
}
}
}
#[derive(Clone, Debug, ValueEnum, PartialEq, Eq, Deserialize, Serialize)]
pub enum EntropySeverity {
Low,
Medium,
High,
}
impl fmt::Display for EntropySeverity {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
EntropySeverity::Low => write!(f, "low"),
EntropySeverity::Medium => write!(f, "medium"),
EntropySeverity::High => write!(f, "high"),
}
}
}