use async_trait::async_trait;
use reqwest::Method;
use serde::{Deserialize, Serialize};
use smbcloud_ascapi_core::jsonapi::{Document, Resource};
use smbcloud_ascapi_core::Client;
use smbcloud_ascapi_core::Result;
pub const RESOURCE_TYPE: &str = "appInfos";
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AppInfoAttributes {
pub app_store_state: Option<String>,
pub app_store_age_rating: Option<String>,
pub brazil_age_rating: Option<String>,
pub kids_age_band: Option<String>,
}
pub type AppInfo = Resource<AppInfoAttributes>;
#[async_trait]
pub trait AppInfosApi {
async fn list_app_infos(&self, app_id: &str) -> Result<Vec<AppInfo>>;
async fn get_app_info(&self, id: &str) -> Result<AppInfo>;
}
#[async_trait]
impl AppInfosApi for Client {
async fn list_app_infos(&self, app_id: &str) -> Result<Vec<AppInfo>> {
let path = format!("/v1/apps/{app_id}/appInfos");
self.list_all::<AppInfoAttributes>(&path, &[]).await
}
async fn get_app_info(&self, id: &str) -> Result<AppInfo> {
let path = format!("/v1/appInfos/{id}");
let doc: Document<AppInfoAttributes> =
self.request(Method::GET, &path, &[], None::<&()>).await?;
Ok(doc.data)
}
}