aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver
diff options
context:
space:
mode:
Diffstat (limited to 'crates/shirabe/src/dependency_resolver')
-rw-r--r--crates/shirabe/src/dependency_resolver/generic_rule.rs5
-rw-r--r--crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs5
-rw-r--r--crates/shirabe/src/dependency_resolver/rule.rs34
-rw-r--r--crates/shirabe/src/dependency_resolver/rule2_literals.rs5
4 files changed, 28 insertions, 21 deletions
diff --git a/crates/shirabe/src/dependency_resolver/generic_rule.rs b/crates/shirabe/src/dependency_resolver/generic_rule.rs
index 1e14020..19974b6 100644
--- a/crates/shirabe/src/dependency_resolver/generic_rule.rs
+++ b/crates/shirabe/src/dependency_resolver/generic_rule.rs
@@ -1,18 +1,19 @@
//! ref: composer/src/Composer/DependencyResolver/GenericRule.php
-use crate::dependency_resolver::rule::Rule;
+use crate::dependency_resolver::rule::{Rule, RuleBase};
use anyhow::Result;
use shirabe_php_shim::{PHP_VERSION_ID, PhpMixed, RuntimeException, hash_raw, implode, unpack};
use super::{request::Request, rule::ReasonData};
pub struct GenericRule {
+ inner: RuleBase,
pub(crate) literals: Vec<i64>,
}
impl GenericRule {
pub fn new(mut literals: Vec<i64>, reason: PhpMixed, reason_data: PhpMixed) -> Self {
- let inner = Rule::new(reason, reason_data);
+ let inner = RuleBase::new(reason, reason_data);
literals.sort();
Self { inner, literals }
}
diff --git a/crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs b/crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs
index 33ba3ca..d198a27 100644
--- a/crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs
+++ b/crates/shirabe/src/dependency_resolver/multi_conflict_rule.rs
@@ -4,12 +4,13 @@ use shirabe_php_shim::PhpMixed;
use crate::dependency_resolver::generic_rule::RuleLiterals;
use crate::dependency_resolver::request::Request;
-use crate::dependency_resolver::rule::{ReasonData, Rule};
+use crate::dependency_resolver::rule::{ReasonData, Rule, RuleBase};
use anyhow::Result;
use shirabe_php_shim::{PHP_VERSION_ID, RuntimeException, hash_raw};
#[derive(Debug)]
pub struct MultiConflictRule {
+ inner: RuleBase,
pub(crate) literals: Vec<i64>,
}
@@ -31,7 +32,7 @@ impl MultiConflictRule {
literals.sort();
Ok(Self {
- inner: Rule::new(reason, reason_data),
+ inner: RuleBase::new(reason, reason_data),
literals,
})
}
diff --git a/crates/shirabe/src/dependency_resolver/rule.rs b/crates/shirabe/src/dependency_resolver/rule.rs
index d1ec5c9..23a5981 100644
--- a/crates/shirabe/src/dependency_resolver/rule.rs
+++ b/crates/shirabe/src/dependency_resolver/rule.rs
@@ -67,21 +67,6 @@ pub trait Rule: std::fmt::Display {
fn equals(&self, rule: &dyn Rule) -> bool;
fn is_assertion(&self) -> bool;
- /// @param self::RULE_* $reason A RULE_* constant describing the reason for generating this rule
- /// @param mixed $reasonData
- ///
- /// @phpstan-param ReasonData $reasonData
- fn new(reason: i64, reason_data: ReasonData) -> Self {
- let bitfield = (0i64 << Self::BITFIELD_DISABLED)
- | (reason << Self::BITFIELD_REASON)
- | (255i64 << Self::BITFIELD_TYPE);
- Self {
- bitfield,
- request: None,
- reason_data,
- }
- }
-
/// @return self::RULE_*
fn get_reason(&self) -> i64 {
(self.bitfield & (255 << Self::BITFIELD_REASON)) >> Self::BITFIELD_REASON
@@ -680,3 +665,22 @@ pub trait Rule: std::fmt::Display {
package
}
}
+
+pub struct RuleBase {
+ bitfield: i64,
+ request: Option<Request>,
+ reason_data: Option<ReasonData>,
+}
+
+impl RuleBase {
+ fn new(reason: i64, reason_data: ReasonData) -> Self {
+ let bitfield = (0i64 << Self::BITFIELD_DISABLED)
+ | (reason << Self::BITFIELD_REASON)
+ | (255i64 << Self::BITFIELD_TYPE);
+ Self {
+ bitfield,
+ request: None,
+ reason_data: Some(reason_data),
+ }
+ }
+}
diff --git a/crates/shirabe/src/dependency_resolver/rule2_literals.rs b/crates/shirabe/src/dependency_resolver/rule2_literals.rs
index 183e9a8..cdd1a9c 100644
--- a/crates/shirabe/src/dependency_resolver/rule2_literals.rs
+++ b/crates/shirabe/src/dependency_resolver/rule2_literals.rs
@@ -4,10 +4,11 @@ use shirabe_php_shim::PhpMixed;
use crate::dependency_resolver::generic_rule::RuleLiterals;
use crate::dependency_resolver::request::Request;
-use crate::dependency_resolver::rule::{ReasonData, Rule};
+use crate::dependency_resolver::rule::{ReasonData, Rule, RuleBase};
#[derive(Debug)]
pub struct Rule2Literals {
+ inner: RuleBase,
pub(crate) literal1: i64,
pub(crate) literal2: i64,
literals: Vec<i64>,
@@ -27,7 +28,7 @@ impl Rule2Literals {
};
Self {
- inner: Rule::new(reason, reason_data),
+ inner: RuleBase::new(reason, reason_data),
literal1,
literal2,
literals: vec![literal1, literal2],