use syn::{parse_quote, Path};
use crate::cmd::{FlowCount, ProfileCount};
#[allow(clippy::enum_variant_names)]
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum Scope {
MultiProfileNoFlow,
MultiProfileSingleFlow,
NoProfileNoFlow,
SingleProfileNoFlow,
SingleProfileSingleFlow,
}
impl Scope {
pub fn type_path(self) -> Path {
match self {
Scope::MultiProfileNoFlow => parse_quote!(crate::scopes::MultiProfileNoFlow),
Scope::MultiProfileSingleFlow => {
parse_quote!(crate::scopes::MultiProfileSingleFlow)
}
Scope::NoProfileNoFlow => parse_quote!(crate::scopes::NoProfileNoFlow),
Scope::SingleProfileNoFlow => parse_quote!(crate::scopes::SingleProfileNoFlow),
Scope::SingleProfileSingleFlow => {
parse_quote!(crate::scopes::SingleProfileSingleFlow)
}
}
}
pub fn as_str(self) -> &'static str {
match self {
Scope::MultiProfileNoFlow => "multi_profile_no_flow",
Scope::MultiProfileSingleFlow => "multi_profile_single_flow",
Scope::NoProfileNoFlow => "no_profile_no_flow",
Scope::SingleProfileNoFlow => "single_profile_no_flow",
Scope::SingleProfileSingleFlow => "single_profile_single_flow",
}
}
pub fn profile_count(self) -> ProfileCount {
match self {
Scope::MultiProfileNoFlow => ProfileCount::Multiple,
Scope::MultiProfileSingleFlow => ProfileCount::Multiple,
Scope::NoProfileNoFlow => ProfileCount::None,
Scope::SingleProfileNoFlow => ProfileCount::One,
Scope::SingleProfileSingleFlow => ProfileCount::One,
}
}
pub fn flow_count(self) -> FlowCount {
match self {
Scope::MultiProfileNoFlow => FlowCount::None,
Scope::MultiProfileSingleFlow => FlowCount::One,
Scope::NoProfileNoFlow => FlowCount::None,
Scope::SingleProfileNoFlow => FlowCount::None,
Scope::SingleProfileSingleFlow => FlowCount::One,
}
}
pub fn profile_params_supported(self) -> bool {
match self.profile_count() {
ProfileCount::None => false,
ProfileCount::One | ProfileCount::Multiple => true,
}
}
pub fn flow_params_supported(self) -> bool {
match self.flow_count() {
FlowCount::None => false,
FlowCount::One => true,
}
}
}