use std::sync::{Arc, Mutex};
use crate::{
When,
api::server::MockServer,
common::{
data::RequestRequirements,
util::{Join, update_mutex},
},
};
pub struct ForwardingRule<'a> {
pub id: usize,
pub(crate) server: &'a MockServer,
}
impl<'a> ForwardingRule<'a> {
pub fn new(id: usize, server: &'a MockServer) -> Self {
Self { id, server }
}
pub fn delete(&mut self) {
self.delete_async().join();
}
pub async fn delete_async(&self) {
self.server
.server_adapter
.as_ref()
.unwrap()
.delete_forwarding_rule(self.id)
.await
.expect("could not delete mock from server");
}
}
pub struct ProxyRule<'a> {
pub id: usize,
pub(crate) server: &'a MockServer,
}
impl<'a> ProxyRule<'a> {
pub fn new(id: usize, server: &'a MockServer) -> Self {
Self { id, server }
}
pub fn delete(&mut self) {
self.delete_async().join();
}
pub async fn delete_async(&self) {
self.server
.server_adapter
.as_ref()
.unwrap()
.delete_proxy_rule(self.id)
.await
.expect("could not delete mock from server");
}
}
pub struct ForwardingRuleBuilder {
pub(crate) request_requirements: Arc<Mutex<RequestRequirements>>,
pub(crate) headers: Arc<Mutex<Vec<(String, String)>>>,
}
impl ForwardingRuleBuilder {
pub fn add_request_header<Key: Into<String>, Value: Into<String>>(self, key: Key, value: Value) -> Self {
update_mutex(&self.headers, |headers| headers.push((key.into(), value.into())));
self
}
pub fn filter<WhenSpecFn>(self, when: WhenSpecFn) -> Self
where
WhenSpecFn: FnOnce(When),
{
when(When {
expectations: self.request_requirements.clone(),
});
self
}
}
pub struct ProxyRuleBuilder {
pub(crate) request_requirements: Arc<Mutex<RequestRequirements>>,
pub(crate) headers: Arc<Mutex<Vec<(String, String)>>>,
}
impl ProxyRuleBuilder {
pub fn add_request_header<Key: Into<String>, Value: Into<String>>(self, key: Key, value: Value) -> Self {
update_mutex(&self.headers, |headers| headers.push((key.into(), value.into())));
self
}
pub fn filter<WhenSpecFn>(self, when: WhenSpecFn) -> Self
where
WhenSpecFn: FnOnce(When),
{
when(When {
expectations: self.request_requirements.clone(),
});
self
}
}