aboutsummaryrefslogtreecommitdiffhomepage
path: root/crates/shirabe/src/dependency_resolver/generic_rule.rs
diff options
context:
space:
mode:
authornsfisis <nsfisis@gmail.com>2026-05-23 17:33:56 +0900
committernsfisis <nsfisis@gmail.com>2026-05-23 17:34:58 +0900
commitf5b987a00712211b7ce56300851182bda904e97b (patch)
treebc68c720246a988c11d83cf3e4a6dc78cee90023 /crates/shirabe/src/dependency_resolver/generic_rule.rs
parent106e01f36fa8dd9bc3eb3a1411bd011a618a2836 (diff)
downloadphp-shirabe-f5b987a00712211b7ce56300851182bda904e97b.tar.gz
php-shirabe-f5b987a00712211b7ce56300851182bda904e97b.tar.zst
php-shirabe-f5b987a00712211b7ce56300851182bda904e97b.zip
refactor(resolver): change Rule to a closed enum
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Diffstat (limited to 'crates/shirabe/src/dependency_resolver/generic_rule.rs')
-rw-r--r--crates/shirabe/src/dependency_resolver/generic_rule.rs85
1 files changed, 12 insertions, 73 deletions
diff --git a/crates/shirabe/src/dependency_resolver/generic_rule.rs b/crates/shirabe/src/dependency_resolver/generic_rule.rs
index 11cff06..eada1c3 100644
--- a/crates/shirabe/src/dependency_resolver/generic_rule.rs
+++ b/crates/shirabe/src/dependency_resolver/generic_rule.rs
@@ -2,9 +2,9 @@
use crate::dependency_resolver::{Rule, RuleBase};
use anyhow::Result;
-use shirabe_php_shim::{PHP_VERSION_ID, PhpMixed, RuntimeException, hash_raw, implode, unpack};
+use shirabe_php_shim::{PHP_VERSION_ID, PhpMixed, RuntimeException, hash_raw, unpack};
-use super::{request::Request, rule::ReasonData};
+use super::rule::ReasonData;
#[derive(Debug)]
pub struct GenericRule {
@@ -19,6 +19,14 @@ impl GenericRule {
Self { inner, literals }
}
+ pub(crate) fn base(&self) -> &RuleBase {
+ &self.inner
+ }
+
+ pub(crate) fn base_mut(&mut self) -> &mut RuleBase {
+ &mut self.inner
+ }
+
pub fn get_literals(&self) -> &Vec<i64> {
&self.literals
}
@@ -57,8 +65,8 @@ impl GenericRule {
}
}
- pub fn equals(&self, rule: &dyn RuleLiterals) -> bool {
- self.literals == *rule.get_literals()
+ pub fn equals(&self, rule: &Rule) -> bool {
+ self.literals == rule.get_literals()
}
pub fn is_assertion(&self) -> bool {
@@ -66,75 +74,6 @@ impl GenericRule {
}
}
-pub trait RuleLiterals {
- fn get_literals(&self) -> &Vec<i64>;
- fn is_multi_conflict_rule(&self) -> bool {
- false
- }
- fn is_assertion(&self) -> bool {
- false
- }
- fn is_disabled(&self) -> bool {
- false
- }
- fn as_any(&self) -> &dyn std::any::Any {
- todo!()
- }
- /// Clone this rule into an owned `Box<dyn Rule>` so callers like
- /// `RuleWatchGraph::propagate_literal` can hand it to `Decisions::decide`.
- fn clone_rule_box(&self) -> Box<dyn Rule> {
- todo!()
- }
-}
-
-impl RuleLiterals for GenericRule {
- fn get_literals(&self) -> &Vec<i64> {
- &self.literals
- }
-}
-
-impl Rule for GenericRule {
- fn bitfield(&self) -> i64 {
- todo!()
- }
-
- fn bitfield_mut(&mut self) -> &mut i64 {
- todo!()
- }
-
- fn request(&self) -> Option<&Request> {
- todo!()
- }
-
- fn request_mut(&mut self) -> Option<&mut Request> {
- todo!()
- }
-
- fn reason_data(&self) -> Option<&ReasonData> {
- todo!()
- }
-
- fn reason_data_mut(&mut self) -> Option<&mut ReasonData> {
- todo!()
- }
-
- fn get_literals(&self) -> Vec<i64> {
- todo!()
- }
-
- fn get_hash(&self) -> PhpMixed {
- todo!()
- }
-
- fn equals(&self, rule: &dyn Rule) -> bool {
- todo!()
- }
-
- fn is_assertion(&self) -> bool {
- todo!()
- }
-}
-
impl std::fmt::Display for GenericRule {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(