foundry_compilers/compilers/
restrictions.rsuse std::{
fmt::Debug,
ops::{Deref, DerefMut},
};
use semver::VersionReq;
pub trait CompilerSettingsRestrictions: Copy + Debug + Sync + Send + Clone + Default {
#[must_use]
fn merge(self, other: Self) -> Option<Self>;
}
#[derive(Debug, Clone, Default)]
pub struct RestrictionsWithVersion<T> {
pub version: Option<VersionReq>,
pub restrictions: T,
}
impl<T: CompilerSettingsRestrictions> RestrictionsWithVersion<T> {
pub fn merge(mut self, other: Self) -> Option<Self> {
if let Some(version) = other.version {
if let Some(self_version) = self.version.as_mut() {
self_version.comparators.extend(version.comparators);
} else {
self.version = Some(version);
}
}
self.restrictions = self.restrictions.merge(other.restrictions)?;
Some(self)
}
}
impl<T> Deref for RestrictionsWithVersion<T> {
type Target = T;
fn deref(&self) -> &Self::Target {
&self.restrictions
}
}
impl<T> DerefMut for RestrictionsWithVersion<T> {
fn deref_mut(&mut self) -> &mut Self::Target {
&mut self.restrictions
}
}