pub const GRAMMARLY_CHECK_URL: &str = "https://grammarbot.p.rapidapi.com/check";
#[derive(Debug, Default, Clone, serde::Serialize)]
pub struct ApiKey(pub String);
impl<T> From<T> for ApiKey
where
T: AsRef<str>,
{
fn from(s: T) -> ApiKey {
ApiKey(s.as_ref().to_owned())
}
}
#[derive(Debug, Clone, serde::Serialize)]
pub enum EnglishLanguageVariation {
British,
American,
}
#[derive(Debug, Clone, serde::Serialize)]
pub enum Language {
English(EnglishLanguageVariation),
}
impl Language {
pub fn to_short_string(&self) -> &'static str {
match self {
Language::English(EnglishLanguageVariation::British) => "en-GB",
Language::English(EnglishLanguageVariation::American) => "en-US",
}
}
}
impl Default for Language {
fn default() -> Language {
Language::English(EnglishLanguageVariation::British)
}
}
#[derive(Debug, Default, Clone, serde::Serialize)]
pub struct RequestData {
pub language: String,
pub text: String,
}
#[derive(Debug, Default, Clone, serde::Serialize)]
pub struct Request {
api_key: ApiKey,
data: RequestData,
}
impl<T> From<T> for Request
where
T: AsRef<str>,
{
fn from(s: T) -> Request {
Request {
data: RequestData {
text: s.as_ref().to_owned(),
..Default::default()
},
..Default::default()
}
}
}
impl Request {
pub fn api_key<T: Into<ApiKey>>(&mut self, key: T) -> &mut Request {
self.api_key = key.into();
self
}
pub fn language<T: Into<Language>>(&mut self, language: T) -> &mut Request {
self.data.language = language.into().to_short_string().to_owned();
self
}
}
#[derive(Debug, Clone)]
pub struct HttpRequest {
pub url: String,
pub headers: Vec<(String, String)>,
pub data: RequestData,
}
impl From<&Request> for HttpRequest {
fn from(r: &Request) -> HttpRequest {
HttpRequest {
url: GRAMMARLY_CHECK_URL.to_owned(),
headers: vec![
(
"x-rapidapi-host".to_owned(),
"grammarbot.p.rapidapi.com".to_owned(),
),
("x-rapidapi-key".to_owned(), r.api_key.0.clone()),
("useQueryString".to_owned(), "true".to_owned()),
],
data: r.data.clone(),
}
}
}