relay-core-runtime 0.3.4

High-performance Rust traffic interception engine and proxy platform
Documentation
use std::sync::Arc;
use async_trait::async_trait;
use serde_json::Value;
use relay_core_lib::rule::Rule;
use relay_core_lib::rule::engine::RuleEngine;
use crate::audit::AuditActor;
use crate::rule::{InterceptRuleConfig, MockResponseRuleConfig};
use crate::CoreState;

#[async_trait]
pub trait RuleService: Send + Sync {
    async fn get_rules(&self) -> Vec<Rule>;
    async fn get_rule_engine(&self) -> Arc<RuleEngine>;
    async fn upsert_rule_from(
        &self,
        actor: AuditActor,
        operation: &str,
        target: String,
        details: Value,
        rule: Rule,
    ) -> Result<(), String>;
    async fn delete_rule_from(
        &self,
        actor: AuditActor,
        operation: &str,
        target: String,
        details: Value,
        rule_id: &str,
    ) -> Result<bool, String>;
    async fn create_mock_response_rule_from(
        &self,
        actor: AuditActor,
        target: String,
        details: Value,
        config: MockResponseRuleConfig,
    ) -> Result<String, String>;
    async fn create_intercept_rule_from(
        &self,
        actor: AuditActor,
        target: String,
        details: Value,
        config: InterceptRuleConfig,
    ) -> Result<String, String>;
}

#[async_trait]
impl RuleService for CoreState {
    async fn get_rules(&self) -> Vec<Rule> {
        CoreState::get_rules(self).await
    }

    async fn get_rule_engine(&self) -> Arc<RuleEngine> {
        CoreState::get_rule_engine(self).await
    }

    async fn upsert_rule_from(
        &self,
        actor: AuditActor,
        operation: &str,
        target: String,
        details: Value,
        rule: Rule,
    ) -> Result<(), String> {
        CoreState::upsert_rule_from(self, actor, operation, target, details, rule).await
    }

    async fn delete_rule_from(
        &self,
        actor: AuditActor,
        operation: &str,
        target: String,
        details: Value,
        rule_id: &str,
    ) -> Result<bool, String> {
        CoreState::delete_rule_from(self, actor, operation, target, details, rule_id).await
    }

    async fn create_mock_response_rule_from(
        &self,
        actor: AuditActor,
        target: String,
        details: Value,
        config: MockResponseRuleConfig,
    ) -> Result<String, String> {
        CoreState::create_mock_response_rule_from(self, actor, target, details, config).await
    }

    async fn create_intercept_rule_from(
        &self,
        actor: AuditActor,
        target: String,
        details: Value,
        config: InterceptRuleConfig,
    ) -> Result<String, String> {
        CoreState::create_intercept_rule_from(self, actor, target, details, config).await
    }
}