1pub const GRAMMARLY_CHECK_URL: &str = "https://grammarbot.p.rapidapi.com/check";
5
6#[derive(Debug, Default, Clone, serde::Serialize)]
8pub struct ApiKey(pub String);
9
10impl<T> From<T> for ApiKey
11where
12 T: AsRef<str>,
13{
14 fn from(s: T) -> ApiKey {
15 ApiKey(s.as_ref().to_owned())
16 }
17}
18
19#[derive(Debug, Clone, serde::Serialize)]
21pub enum EnglishLanguageVariation {
22 British,
24 American,
26}
27
28#[derive(Debug, Clone, serde::Serialize)]
30pub enum Language {
31 English(EnglishLanguageVariation),
33}
34
35impl Language {
36 pub fn to_short_string(&self) -> &'static str {
38 match self {
39 Language::English(EnglishLanguageVariation::British) => "en-GB",
40 Language::English(EnglishLanguageVariation::American) => "en-US",
41 }
42 }
43}
44
45impl Default for Language {
46 fn default() -> Language {
47 Language::English(EnglishLanguageVariation::British)
48 }
49}
50
51#[derive(Debug, Default, Clone, serde::Serialize)]
53pub struct RequestData {
54 pub language: String,
56 pub text: String,
58}
59
60#[derive(Debug, Default, Clone, serde::Serialize)]
62pub struct Request {
63 api_key: ApiKey,
64 data: RequestData,
65}
66
67impl<T> From<T> for Request
68where
69 T: AsRef<str>,
70{
71 fn from(s: T) -> Request {
72 Request {
73 data: RequestData {
74 text: s.as_ref().to_owned(),
75 ..Default::default()
76 },
77 ..Default::default()
78 }
79 }
80}
81
82impl Request {
83 pub fn api_key<T: Into<ApiKey>>(&mut self, key: T) -> &mut Request {
86 self.api_key = key.into();
87 self
88 }
89
90 pub fn language<T: Into<Language>>(&mut self, language: T) -> &mut Request {
92 self.data.language = language.into().to_short_string().to_owned();
93 self
94 }
95}
96
97#[derive(Debug, Clone)]
102pub struct HttpRequest {
103 pub url: String,
105 pub headers: Vec<(String, String)>,
107 pub data: RequestData,
109}
110
111impl From<&Request> for HttpRequest {
112 fn from(r: &Request) -> HttpRequest {
113 HttpRequest {
114 url: GRAMMARLY_CHECK_URL.to_owned(),
115 headers: vec![
116 (
117 "x-rapidapi-host".to_owned(),
118 "grammarbot.p.rapidapi.com".to_owned(),
119 ),
120 ("x-rapidapi-key".to_owned(), r.api_key.0.clone()),
121 ("useQueryString".to_owned(), "true".to_owned()),
122 ],
123 data: r.data.clone(),
124 }
125 }
126}