elph_core/layout/
version.rs1use crate::layout::files::write_json_file;
2use crate::utils::path::AppPaths;
3use crate::utils::time::utc_rfc3339_now;
4use anyhow::Result;
5use serde::{Deserialize, Serialize};
6
7#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
8#[serde(rename_all = "camelCase")]
9pub struct VersionFile {
10 #[serde(skip_serializing_if = "Option::is_none")]
11 pub last_sync_providers: Option<String>,
12 #[serde(skip_serializing_if = "Option::is_none")]
13 pub release_checked_at: Option<String>,
14 #[serde(skip_serializing_if = "Option::is_none")]
15 pub stable_version: Option<String>,
16 pub version: String,
17}
18
19impl VersionFile {
20 pub fn defaults(app_version: &str) -> Self {
21 let now = utc_rfc3339_now();
22 Self {
23 last_sync_providers: None,
24 release_checked_at: Some(now),
25 stable_version: None,
26 version: app_version.to_string(),
27 }
28 }
29
30 pub fn ensure<P: AppPaths>(paths: &P, app_version: &str) -> Result<()> {
31 let path = paths.version_path();
32 if path.exists() {
33 return Ok(());
34 }
35
36 write_json_file(&path, &Self::defaults(app_version))?;
37 Ok(())
38 }
39}