use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "lowercase")]
pub enum UpgradeType {
Prompt,
Force,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct TauriUpdateExtensions {
pub upgrade_type: UpgradeType,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_version: Option<String>,
pub rollout_percent: i16,
pub channel: String,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct TauriUpdateResponse {
pub version: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub pub_date: Option<String>,
pub url: String,
pub signature: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub notes: Option<String>,
pub swarmhive: TauriUpdateExtensions,
}
#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
pub struct AndroidUpdateResponse {
pub has_update: bool,
#[serde(skip_serializing_if = "Option::is_none")]
pub version_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub version_code: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub upgrade_type: Option<UpgradeType>,
#[serde(skip_serializing_if = "Option::is_none")]
pub min_version_code: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub download_url: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub release_notes: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub size_bytes: Option<i64>,
#[serde(skip_serializing_if = "Option::is_none")]
pub sha256: Option<String>,
}
impl AndroidUpdateResponse {
pub fn no_update() -> Self {
Self {
has_update: false,
version_name: None,
version_code: None,
upgrade_type: None,
min_version_code: None,
download_url: None,
release_notes: None,
size_bytes: None,
sha256: None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn upgrade_type_wire_is_lowercase() {
assert_eq!(
serde_json::to_string(&UpgradeType::Prompt).unwrap(),
"\"prompt\""
);
assert_eq!(
serde_json::to_string(&UpgradeType::Force).unwrap(),
"\"force\""
);
assert_eq!(
serde_json::from_str::<UpgradeType>("\"force\"").unwrap(),
UpgradeType::Force
);
}
#[test]
fn android_no_update_serializes_minimally() {
let v = serde_json::to_value(AndroidUpdateResponse::no_update()).unwrap();
assert_eq!(v, serde_json::json!({ "has_update": false }));
}
}