use async_trait::async_trait;
use reqwest::Method;
use serde::{Deserialize, Serialize};
use smbcloud_ascapi_core::jsonapi::{ListDocument, Resource};
use smbcloud_ascapi_core::Client;
use smbcloud_ascapi_core::Result;
pub const RESOURCE_TYPE: &str = "builds";
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct BuildAttributes {
pub version: Option<String>,
pub uploaded_date: Option<String>,
pub expired: Option<bool>,
pub processing_state: Option<String>,
pub min_os_version: Option<String>,
}
pub type Build = Resource<BuildAttributes>;
#[async_trait]
pub trait BuildsApi {
async fn list_builds(&self, app_id: &str) -> Result<Vec<Build>>;
}
#[async_trait]
impl BuildsApi for Client {
async fn list_builds(&self, app_id: &str) -> Result<Vec<Build>> {
let path = format!("/v1/apps/{app_id}/builds");
let doc: ListDocument<BuildAttributes> =
self.request(Method::GET, &path, &[], None::<&()>).await?;
let mut builds = doc.data;
builds.sort_by(|a, b| b.attributes.uploaded_date.cmp(&a.attributes.uploaded_date));
Ok(builds)
}
}