use xuanji::Severity;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct AsyncExposureBoundary {
pub(crate) crate_package: String,
pub(crate) module: String,
pub(crate) reason: String,
pub(crate) anchor: Option<String>,
pub(crate) severity: Severity,
pub(crate) including_submodules: bool,
}
impl AsyncExposureBoundary {
pub fn in_crate(package: &str) -> AsyncExposureCrateDraft {
AsyncExposureCrateDraft {
crate_package: package.to_string(),
}
}
pub fn crate_package(&self) -> &str {
&self.crate_package
}
pub fn module(&self) -> &str {
&self.module
}
pub fn reason(&self) -> &str {
&self.reason
}
pub fn with_anchor(mut self, anchor: &str) -> Self {
self.anchor = Some(anchor.to_string());
self
}
pub fn anchor(&self) -> Option<&str> {
self.anchor.as_deref()
}
pub fn severity(&self) -> Severity {
self.severity
}
pub fn including_submodules(&self) -> bool {
self.including_submodules
}
}
#[doc(hidden)]
pub struct AsyncExposureCrateDraft {
crate_package: String,
}
impl AsyncExposureCrateDraft {
pub fn module(self, module: &str) -> AsyncExposureModuleDraft {
AsyncExposureModuleDraft {
crate_package: self.crate_package,
module: module.to_string(),
}
}
}
#[doc(hidden)]
pub struct AsyncExposureModuleDraft {
crate_package: String,
module: String,
}
impl AsyncExposureModuleDraft {
pub fn must_not_expose_async_fn(self) -> AsyncExposureBoundaryDraft {
AsyncExposureBoundaryDraft {
crate_package: self.crate_package,
module: self.module,
severity: Severity::Enforce,
including_submodules: false,
}
}
}
#[doc(hidden)]
pub struct AsyncExposureBoundaryDraft {
crate_package: String,
module: String,
severity: Severity,
including_submodules: bool,
}
impl AsyncExposureBoundaryDraft {
pub fn warn(mut self) -> Self {
self.severity = Severity::Warn;
self
}
pub fn including_submodules(mut self) -> Self {
self.including_submodules = true;
self
}
pub fn because(self, reason: &str) -> AsyncExposureBoundary {
AsyncExposureBoundary {
crate_package: self.crate_package,
module: self.module,
reason: reason.to_string(),
anchor: None,
severity: self.severity,
including_submodules: self.including_submodules,
}
}
}