use reqwest::Client;
use serde::Deserialize;
use crate::ddi::client::Error;
use crate::ddi::common::{send_feedback_internal, Execution, Finished};
#[derive(Debug)]
pub struct CancelAction {
client: Client,
url: String,
}
impl CancelAction {
pub(crate) fn new(client: Client, url: String) -> Self {
Self { client, url }
}
pub async fn id(&self) -> Result<String, Error> {
let reply = self.client.get(&self.url).send().await?;
reply.error_for_status_ref()?;
let reply = reply.json::<CancelReply>().await?;
Ok(reply.cancel_action.stop_id)
}
pub async fn send_feedback(
&self,
execution: Execution,
finished: Finished,
details: Vec<&str>,
) -> Result<(), Error> {
let id = self.id().await?;
send_feedback_internal::<bool>(
&self.client,
&self.url,
&id,
execution,
finished,
None,
details,
)
.await
}
}
#[allow(dead_code)]
#[derive(Debug, Deserialize)]
struct CancelReply {
id: String,
#[serde(rename = "cancelAction")]
cancel_action: CancelActionReply,
}
#[derive(Debug, Deserialize)]
struct CancelActionReply {
#[serde(rename = "stopId")]
stop_id: String,
}