@@ -18,6 +18,7 @@ use minisign_verify::{PublicKey, Signature};
1818use semver:: Version ;
1919use serde:: { de:: Error as DeError , Deserialize , Deserializer , Serialize } ;
2020use tauri_utils:: { platform:: current_exe, Env } ;
21+ use time:: OffsetDateTime ;
2122use url:: Url ;
2223
2324#[ cfg( feature = "updater" ) ]
@@ -57,16 +58,15 @@ pub enum RemoteReleaseInner {
5758/// Information about a release returned by the remote update server.
5859///
5960/// This type can have one of two shapes: Server Format (Dynamic Format) and Static Format.
60- #[ derive( Debug , Serialize ) ]
61+ #[ derive( Debug ) ]
6162pub struct RemoteRelease {
6263 /// Version to install.
6364 version : Version ,
6465 /// Release notes.
6566 notes : Option < String > ,
6667 /// Release date.
67- pub_date : String ,
68+ pub_date : Option < OffsetDateTime > ,
6869 /// Release data.
69- #[ serde( flatten) ]
7070 data : RemoteReleaseInner ,
7171}
7272
@@ -75,17 +75,12 @@ impl<'de> Deserialize<'de> for RemoteRelease {
7575 where
7676 D : Deserializer < ' de > ,
7777 {
78- fn default_pub_date ( ) -> String {
79- "N/A" . to_string ( )
80- }
81-
8278 #[ derive( Deserialize ) ]
8379 struct InnerRemoteRelease {
8480 #[ serde( alias = "name" , deserialize_with = "parse_version" ) ]
8581 version : Version ,
8682 notes : Option < String > ,
87- #[ serde( default = "default_pub_date" ) ]
88- pub_date : String ,
83+ pub_date : Option < String > ,
8984 platforms : Option < HashMap < String , ReleaseManifestPlatform > > ,
9085 // dynamic platform response
9186 url : Option < Url > ,
@@ -97,10 +92,19 @@ impl<'de> Deserialize<'de> for RemoteRelease {
9792
9893 let release = InnerRemoteRelease :: deserialize ( deserializer) ?;
9994
95+ let pub_date = if let Some ( date) = release. pub_date {
96+ Some (
97+ OffsetDateTime :: parse ( & date, & time:: format_description:: well_known:: Rfc3339 )
98+ . map_err ( |e| DeError :: custom ( format ! ( "invalid value for `pub_date`: {}" , e) ) ) ?,
99+ )
100+ } else {
101+ None
102+ } ;
103+
100104 Ok ( RemoteRelease {
101105 version : release. version ,
102106 notes : release. notes ,
103- pub_date : release . pub_date ,
107+ pub_date,
104108 data : if let Some ( platforms) = release. platforms {
105109 RemoteReleaseInner :: Static { platforms }
106110 } else {
@@ -152,8 +156,8 @@ impl RemoteRelease {
152156 }
153157
154158 /// The release date.
155- pub fn pub_date ( & self ) -> & String {
156- & self . pub_date
159+ pub fn pub_date ( & self ) -> Option < & OffsetDateTime > {
160+ self . pub_date . as_ref ( )
157161 }
158162
159163 /// The release's download URL for the given target.
@@ -431,7 +435,7 @@ impl<R: Runtime> UpdateBuilder<R> {
431435 extract_path,
432436 should_update,
433437 version : final_release. version ( ) . to_string ( ) ,
434- date : final_release. pub_date ( ) . to_string ( ) ,
438+ date : final_release. pub_date ( ) . cloned ( ) ,
435439 current_version : self . current_version ,
436440 download_url : final_release. download_url ( & json_target) ?. to_owned ( ) ,
437441 body : final_release. notes ( ) . cloned ( ) ,
@@ -461,7 +465,7 @@ pub struct Update<R: Runtime> {
461465 /// Running version
462466 pub current_version : Version ,
463467 /// Update publish date
464- pub date : String ,
468+ pub date : Option < OffsetDateTime > ,
465469 /// Target
466470 #[ allow( dead_code) ]
467471 target : String ,
@@ -489,7 +493,7 @@ impl<R: Runtime> Clone for Update<R> {
489493 should_update : self . should_update ,
490494 version : self . version . clone ( ) ,
491495 current_version : self . current_version . clone ( ) ,
492- date : self . date . clone ( ) ,
496+ date : self . date ,
493497 target : self . target . clone ( ) ,
494498 extract_path : self . extract_path . clone ( ) ,
495499 download_url : self . download_url . clone ( ) ,
0 commit comments