use reqwest::header::CONTENT_TYPE;
use serde::{Deserialize, Serialize};
use crate::client::Client;
use crate::error::Result;
use crate::keys::StatusResponse;
#[derive(Debug, Clone, Serialize, Default)]
pub struct ContactRequest {
pub name: String,
pub email: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub subject: Option<String>,
pub message: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ContactResponse {
pub status: String,
#[serde(default)]
pub message: Option<String>,
}
impl Client {
pub async fn contact(&self, req: &ContactRequest) -> Result<StatusResponse> {
let url = format!("{}/qai/v1/contact", self.base_url());
let http = reqwest::Client::new();
let resp = http
.post(&url)
.header(CONTENT_TYPE, "application/json")
.json(req)
.send()
.await?;
if !resp.status().is_success() {
let status_code = resp.status().as_u16();
let body = resp.text().await.unwrap_or_default();
return Err(crate::error::Error::Api(crate::error::ApiError {
status_code,
code: "contact_error".to_string(),
message: body,
request_id: String::new(),
}));
}
let result: StatusResponse = resp.json().await?;
Ok(result)
}
}