1use reqwest::header::CONTENT_TYPE;
2use serde::Serialize;
3
4use crate::client::Client;
5use crate::error::Result;
6use crate::keys::StatusResponse;
7
8#[derive(Debug, Clone, Serialize, Default)]
10pub struct ContactRequest {
11 pub name: String,
13
14 pub email: String,
16
17 #[serde(skip_serializing_if = "Option::is_none")]
19 pub subject: Option<String>,
20
21 pub message: String,
23}
24
25impl Client {
26 pub async fn contact(&self, req: &ContactRequest) -> Result<StatusResponse> {
31 let url = format!("{}/qai/v1/contact", self.base_url());
32
33 let http = reqwest::Client::new();
34 let resp = http
35 .post(&url)
36 .header(CONTENT_TYPE, "application/json")
37 .json(req)
38 .send()
39 .await?;
40
41 if !resp.status().is_success() {
42 let status_code = resp.status().as_u16();
43 let body = resp.text().await.unwrap_or_default();
44 return Err(crate::error::Error::Api(crate::error::ApiError {
45 status_code,
46 code: "contact_error".to_string(),
47 message: body,
48 request_id: String::new(),
49 }));
50 }
51
52 let result: StatusResponse = resp.json().await?;
53 Ok(result)
54 }
55}