use std::fmt;
use std::iter;
use reqwest::header::{HeaderMap, HeaderValue, CONTENT_TYPE};
use reqwest_middleware::RequestBuilder;
use serde::Serialize;
use uuid::Uuid;
pub trait RequestBuilderExt {
fn tenant(self, uuid: Uuid) -> RequestBuilder;
fn json<T: Serialize + ?Sized>(self, json: &T) -> RequestBuilder;
}
impl RequestBuilderExt for RequestBuilder {
fn tenant(self, uuid: Uuid) -> RequestBuilder {
self.header(
"Frontegg-Tenant-Id",
HeaderValue::from_str(&uuid.to_string())
.expect("UUID should always be valid header value"),
)
}
fn json<T: Serialize + ?Sized>(self, json: &T) -> RequestBuilder {
let body = serde_json::to_vec(json).expect("Failed to serialize JSON payload");
let mut headers = HeaderMap::new();
headers.insert(CONTENT_TYPE, HeaderValue::from_static("application/json"));
self.headers(headers).body(body)
}
}
pub trait StrIteratorExt {
fn chain_one<S>(self, s: S) -> Vec<String>
where
S: fmt::Display;
}
impl<T> StrIteratorExt for T
where
T: IntoIterator,
T::Item: AsRef<str>,
{
fn chain_one<S>(self, s: S) -> Vec<String>
where
S: fmt::Display,
{
self.into_iter()
.map(|s| s.as_ref().into())
.chain(iter::once(s.to_string()))
.collect()
}
}