use http::HeaderMap;
use serde::{Deserialize, Serialize};
use serde_json::Value;
use super::SwapOption;
#[derive(Debug, Default, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct LocationOptions {
#[serde(skip_serializing_if = "Option::is_none")]
source: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
event: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
handler: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
target: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
swap: Option<SwapOption>,
#[serde(skip_serializing_if = "Option::is_none")]
values: Option<Value>,
#[serde(skip_serializing_if = "Option::is_none")]
#[serde(with = "http_serde::option::header_map")]
headers: Option<HeaderMap>,
#[serde(skip_serializing_if = "Option::is_none")]
select: Option<String>,
}
impl LocationOptions {
pub fn new() -> Self {
Self::default()
}
pub fn with_source(mut self, source: String) -> Self {
self.source = Some(source);
self
}
pub fn with_event(mut self, event: String) -> Self {
self.event = Some(event);
self
}
pub fn with_handler(mut self, handler: String) -> Self {
self.handler = Some(handler);
self
}
pub fn with_target(mut self, target: String) -> Self {
self.target = Some(target);
self
}
pub fn with_swap(mut self, swap: SwapOption) -> Self {
self.swap = Some(swap);
self
}
pub fn with_values<T>(mut self, values: T) -> Result<Self, serde_json::Error>
where
T: Serialize,
{
self.values = Some(serde_json::to_value(values)?);
Ok(self)
}
pub fn with_headers(mut self, headers: HeaderMap) -> Self {
self.headers = Some(headers);
self
}
pub fn with_select(mut self, select: String) -> Self {
self.select = Some(select);
self
}
pub fn source(&self) -> Option<&str> {
self.source.as_deref()
}
pub fn event(&self) -> Option<&str> {
self.event.as_deref()
}
pub fn handler(&self) -> Option<&str> {
self.handler.as_deref()
}
pub fn target(&self) -> Option<&str> {
self.target.as_deref()
}
pub fn swap(&self) -> Option<SwapOption> {
self.swap
}
pub fn values(&self) -> Option<&Value> {
self.values.as_ref()
}
pub fn headers(&self) -> Option<&HeaderMap> {
self.headers.as_ref()
}
pub fn select(&self) -> Option<&str> {
self.select.as_deref()
}
}