Skip to main content

relay_core_runtime/services/
rule.rs

1use 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}