relay_core_runtime/services/
rule.rs1use std::sync::Arc;
2use async_trait::async_trait;
3use serde_json::Value;
4use relay_core_lib::rule::Rule;
5use relay_core_lib::rule::engine::RuleEngine;
6use crate::audit::AuditActor;
7use crate::rule::{InterceptRuleConfig, MockResponseRuleConfig};
8use crate::CoreState;
9
10#[async_trait]
11pub trait RuleService: Send + Sync {
12 async fn get_rules(&self) -> Vec<Rule>;
13 async fn get_rule_engine(&self) -> Arc<RuleEngine>;
14 async fn upsert_rule_from(
15 &self,
16 actor: AuditActor,
17 operation: &str,
18 target: String,
19 details: Value,
20 rule: Rule,
21 ) -> Result<(), String>;
22 async fn delete_rule_from(
23 &self,
24 actor: AuditActor,
25 operation: &str,
26 target: String,
27 details: Value,
28 rule_id: &str,
29 ) -> Result<bool, String>;
30 async fn create_mock_response_rule_from(
31 &self,
32 actor: AuditActor,
33 target: String,
34 details: Value,
35 config: MockResponseRuleConfig,
36 ) -> Result<String, String>;
37 async fn create_intercept_rule_from(
38 &self,
39 actor: AuditActor,
40 target: String,
41 details: Value,
42 config: InterceptRuleConfig,
43 ) -> Result<String, String>;
44}
45
46#[async_trait]
47impl RuleService for CoreState {
48 async fn get_rules(&self) -> Vec<Rule> {
49 CoreState::get_rules(self).await
50 }
51
52 async fn get_rule_engine(&self) -> Arc<RuleEngine> {
53 CoreState::get_rule_engine(self).await
54 }
55
56 async fn upsert_rule_from(
57 &self,
58 actor: AuditActor,
59 operation: &str,
60 target: String,
61 details: Value,
62 rule: Rule,
63 ) -> Result<(), String> {
64 CoreState::upsert_rule_from(self, actor, operation, target, details, rule).await
65 }
66
67 async fn delete_rule_from(
68 &self,
69 actor: AuditActor,
70 operation: &str,
71 target: String,
72 details: Value,
73 rule_id: &str,
74 ) -> Result<bool, String> {
75 CoreState::delete_rule_from(self, actor, operation, target, details, rule_id).await
76 }
77
78 async fn create_mock_response_rule_from(
79 &self,
80 actor: AuditActor,
81 target: String,
82 details: Value,
83 config: MockResponseRuleConfig,
84 ) -> Result<String, String> {
85 CoreState::create_mock_response_rule_from(self, actor, target, details, config).await
86 }
87
88 async fn create_intercept_rule_from(
89 &self,
90 actor: AuditActor,
91 target: String,
92 details: Value,
93 config: InterceptRuleConfig,
94 ) -> Result<String, String> {
95 CoreState::create_intercept_rule_from(self, actor, target, details, config).await
96 }
97}