use crate::client::RestClient;
use crate::error::Result;
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Action {
pub action_uid: String,
pub name: String,
pub status: String,
pub progress: Option<f32>,
pub start_time: Option<String>,
pub end_time: Option<String>,
pub description: Option<String>,
pub error: Option<String>,
pub bdb_uid: Option<u32>,
pub node_uid: Option<u32>,
}
pub struct ActionHandler {
client: RestClient,
}
impl ActionHandler {
pub fn new(client: RestClient) -> Self {
ActionHandler { client }
}
pub async fn list(&self) -> Result<Vec<Action>> {
self.client.get("/v1/actions").await
}
pub async fn get(&self, action_uid: &str) -> Result<Action> {
self.client
.get(&format!("/v1/actions/{}", action_uid))
.await
}
pub async fn cancel(&self, action_uid: &str) -> Result<()> {
self.client
.delete(&format!("/v1/actions/{}", action_uid))
.await
}
pub async fn list_v2(&self) -> Result<Vec<Action>> {
self.client.get("/v2/actions").await
}
pub async fn get_v2(&self, action_uid: &str) -> Result<Action> {
self.client
.get(&format!("/v2/actions/{}", action_uid))
.await
}
pub async fn list_for_bdb(&self, bdb_uid: u32) -> Result<Vec<Action>> {
self.client
.get(&format!("/v1/actions/bdb/{}", bdb_uid))
.await
}
pub fn v1(&self) -> v1::ActionsV1 {
v1::ActionsV1::new(self.client.clone())
}
pub fn v2(&self) -> v2::ActionsV2 {
v2::ActionsV2::new(self.client.clone())
}
}
pub mod v1 {
use super::{Action, RestClient};
use crate::error::Result;
pub struct ActionsV1 {
client: RestClient,
}
impl ActionsV1 {
pub(crate) fn new(client: RestClient) -> Self {
Self { client }
}
pub async fn list(&self) -> Result<Vec<Action>> {
self.client.get("/v1/actions").await
}
pub async fn get(&self, action_uid: &str) -> Result<Action> {
self.client
.get(&format!("/v1/actions/{}", action_uid))
.await
}
pub async fn cancel(&self, action_uid: &str) -> Result<()> {
self.client
.delete(&format!("/v1/actions/{}", action_uid))
.await
}
pub async fn list_for_bdb(&self, bdb_uid: u32) -> Result<Vec<Action>> {
self.client
.get(&format!("/v1/actions/bdb/{}", bdb_uid))
.await
}
}
}
pub mod v2 {
use super::{Action, RestClient};
use crate::error::Result;
pub struct ActionsV2 {
client: RestClient,
}
impl ActionsV2 {
pub(crate) fn new(client: RestClient) -> Self {
Self { client }
}
pub async fn list(&self) -> Result<Vec<Action>> {
self.client.get("/v2/actions").await
}
pub async fn get(&self, action_uid: &str) -> Result<Action> {
self.client
.get(&format!("/v2/actions/{}", action_uid))
.await
}
}
}