use serde::{Deserialize, Serialize};
use crate::util::QueryBuilder;
#[derive(Clone, Debug, Deserialize)]
pub struct App {
pub app_id: String,
#[serde(default)]
pub slug: Option<String>,
#[serde(default)]
pub name: Option<String>,
#[serde(default)]
pub updated_at: Option<String>,
#[serde(default)]
pub description: Option<String>,
#[serde(default)]
pub logo_url: Option<String>,
#[serde(default)]
pub terms_url: Option<String>,
#[serde(default)]
pub privacy_url: Option<String>,
#[serde(default)]
pub categories: Vec<String>,
#[serde(default)]
pub owner_signup_limit: Option<u32>,
}
#[derive(Clone, Debug, Default)]
pub struct AppsListFilters {
pub limit: Option<u32>,
pub page_token: Option<String>,
pub category: Option<String>,
}
impl AppsListFilters {
pub(crate) fn query(&self) -> Vec<(&'static str, String)> {
QueryBuilder::new()
.opt("limit", self.limit.as_ref())
.opt("page_token", self.page_token.as_ref())
.opt("category", self.category.as_ref())
.build()
}
}
#[derive(Clone, Debug, Deserialize)]
pub struct AppList {
pub count: u64,
#[serde(default)]
pub apps: Vec<App>,
#[serde(default)]
pub next_page_token: Option<String>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct AppSearchList {
pub count: u64,
#[serde(default)]
pub apps: Vec<App>,
}
#[derive(Clone, Debug, Default, Serialize)]
pub struct ConnectApp {
#[serde(skip_serializing_if = "Option::is_none")]
pub inbox_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub accept_disclosure: Option<bool>,
}
#[derive(Clone, Debug, Deserialize)]
pub struct ConnectAppResult {
pub api_key_id: String,
pub magic_url: String,
pub expires_at: String,
}
#[derive(Clone, Debug, Deserialize)]
pub struct AppAccountList {
#[serde(default)]
pub app: Option<App>,
pub count: u64,
#[serde(default)]
pub accounts: Vec<crate::Account>,
#[serde(default)]
pub next_page_token: Option<String>,
}