pub mod dead_letter_queue;
mod error;
pub mod events;
pub mod messages;
pub mod publish;
mod request;
use error::*;
pub use request::*;
use reqwest::{header, Url};
pub enum Version {
V1,
V2,
}
pub struct Client {
pub http: reqwest::Client,
base_url: Url,
version: String,
}
impl Client {
pub fn new(
token: &str,
base_url: Option<&str>,
version: Option<Version>,
) -> Result<Client, QStashError> {
let mut value = match header::HeaderValue::from_str(&format!("Bearer {token}")) {
Ok(v) => v,
Err(e) => {
let formated_string = e.to_string();
tracing::error!(formated_string);
return Err(QStashError::TokenError);
}
};
value.set_sensitive(true);
let mut headers = header::HeaderMap::new();
headers.insert(header::AUTHORIZATION, value);
let http = match reqwest::Client::builder().default_headers(headers).build() {
Ok(c) => c,
Err(e) => {
let formated_string = e.to_string();
tracing::error!(formated_string);
return Err(QStashError::ReqwestError);
}
};
let version = match version.unwrap_or(Version::V2) {
Version::V1 => String::from("v1"),
Version::V2 => String::from("v2"),
};
let url = match Url::parse(base_url.unwrap_or("https://qstash.upstash.io")) {
Ok(u) => u,
Err(e) => {
let formated_string = e.to_string();
tracing::error!(formated_string);
return Err(QStashError::InvalidUrl);
}
};
Ok(Self {
http,
base_url: url,
version,
})
}
}