В моем коде не появляются ошибки, но если я запускаю, появляется эта ошибка
Error deserializing response: error decoding response body: missing field `data` at line 1 column 214
JSON выглядит так, я предполагаю, что должны быть ошибки типа
{
"data": {
"card": {
"title": "ffffff",
"done": false,
"id": "885876174",
"updated_at": "2024-02-29T11:42:00-03:00",
"fields": [
{
"array_value": null,
"name": "",
"native_value": "ffffff",
"value": "ffffff"
},
]
}
]
}
}
}
#[derive(Serialize, Deserialize, Debug)]
pub struct QueryData {
card: CardQuery,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct QueryResult {
data: QueryData,
}
#[derive(Serialize, Deserialize, Debug)]
pub struct CardQuery {
id: String,
title: String,
current_phase: Phase,
fields: Vec<Field>,
done: bool,
}
pub async fn notification(Json(payload): Json<Value>) -> Json<Value> {
dotenv().ok();
let data_value = payload
.get("data")
.expect("Missing 'data' field in request body");
let data_body: NotificationData = serde_json::from_value(data_value.clone())
.expect("Failed to parse 'data' field as NotificationData");
let token_pipefy: String =
std::env::var("TOKEN_PIPEFY").expect("TOKEN_PIPEFY environment variable not found");
let authorization_header = HeaderValue::from_str(&format!("Bearer {}", token_pipefy)).unwrap();
let endpoint = "https://api.pipefy.com/graphql";
let query = r#"
query CardQuery($id: ID!) {
card(id: $id) {
id
title
done
current_phase{
name
}
updated_at
fields{
name
native_value
value
}
}
}
"#;
let variable = json!({"id": data_body.card.id});
let body = serde_json::json!({
"query": query,
"variable": variable
});
let client = Client::new();
let response: reqwest::Response = client
.post(endpoint)
.header("Authorization", authorization_header)
.header("Content-Type", "application/json")
.json(&body)
.send()
.await
.expect("Error sending request");
let json_response: Result<QueryResult, Error> = match response.json().await {
Ok(card) => {
println!("{:#?}", card);
Ok(card)
}
Err(err) => {
println!("Error deserializing response: {}", err);
Err(err)
}
};
match json_response {
Ok(data_query) => {
println!("{:?}", data_query);
if data_body.action == "card.create" {
return Json(json!({
"data": {
"action": data_body.action,
"card": {
"id": data_query,
"title": data_query.data.card.title,
"done": data_query.data.card.done,
"current_phase": data_query.data.card.current_phase,
"fields": {
"filial": data_query.data.card.fields[1],
"buyiD": data_query.data.card.fields[2]
}
}
},
"status": {
"statusCode": "200",
"message": "Inserido com sucesso",
"action": data_body.action
}
}));
} else {
return Json(json!({
"message": {
"msg": "não foi possivel saber qual ação tomar.",
"action": data_body.action
}
}));
}
}
Err(err) => {
print!("{:?}", err);
return Json(json!({
"message": {
"msg": "Não retornou nada",
}
}));
}
}
}
Я пробовал удалить типизацию, добавить больше текста, сделать меньше текста, но все равно выдает ошибку. Я действительно не знаю, где я ошибаюсь, ошибка, вероятно, у меня на лице, но я так стараюсь, что у меня не получается поиск
Вы утверждаете, что JSON ни в коем случае не является таковым, ошибочные запятые, дополнительные фигурные скобки } или странные отступы, куда бы я ни посмотрел. Возможно, стоит начать с его правильного форматирования, исправления ошибок и использования правильного JSON.
ваша структура кода кажется правильной. Проблема может заключаться в том, как работает API Pipefy. тебе следует проверить документы

решено
ошибка в теле... Правильно: «переменные», а не «переменные».
let variable = json!({"id": data_body.card.id});
let body = serde_json::json!({
"query": query,
"variable": variable
});
Правильный:
let variable = json!({"id": data_body.card.id});
let body = serde_json::json!({
"query": query,
"variables": variable
});
Что такое фаза и поле?