13
13
14
14
use std:: { ffi:: OsString , sync:: Arc } ;
15
15
16
+ use http:: { HeaderMap , HeaderName , HeaderValue } ;
16
17
use semver:: Version ;
17
18
use tauri:: {
18
19
plugin:: { Builder as PluginBuilder , TauriPlugin } ,
@@ -74,13 +75,15 @@ impl<R: Runtime, T: Manager<R>> UpdaterExt<R> for T {
74
75
config,
75
76
target,
76
77
version_comparator,
78
+ headers,
77
79
} = self . state :: < UpdaterState > ( ) . inner ( ) ;
78
80
79
81
let mut builder = UpdaterBuilder :: new (
80
82
package_info. name . clone ( ) ,
81
83
package_info. version . clone ( ) ,
82
84
config. clone ( ) ,
83
- ) ;
85
+ )
86
+ . headers ( headers. clone ( ) ) ;
84
87
85
88
if let Some ( target) = target {
86
89
builder = builder. target ( target) ;
@@ -124,13 +127,15 @@ struct UpdaterState {
124
127
target : Option < String > ,
125
128
config : Config ,
126
129
version_comparator : Option < VersionComparator > ,
130
+ headers : HeaderMap ,
127
131
}
128
132
129
133
#[ derive( Default ) ]
130
134
pub struct Builder {
131
135
target : Option < String > ,
132
136
pubkey : Option < String > ,
133
137
installer_args : Vec < OsString > ,
138
+ headers : HeaderMap ,
134
139
default_version_comparator : Option < VersionComparator > ,
135
140
}
136
141
@@ -172,6 +177,26 @@ impl Builder {
172
177
self
173
178
}
174
179
180
+ pub fn header < K , V > ( mut self , key : K , value : V ) -> Result < Self >
181
+ where
182
+ HeaderName : TryFrom < K > ,
183
+ <HeaderName as TryFrom < K > >:: Error : Into < http:: Error > ,
184
+ HeaderValue : TryFrom < V > ,
185
+ <HeaderValue as TryFrom < V > >:: Error : Into < http:: Error > ,
186
+ {
187
+ let key: std:: result:: Result < HeaderName , http:: Error > = key. try_into ( ) . map_err ( Into :: into) ;
188
+ let value: std:: result:: Result < HeaderValue , http:: Error > =
189
+ value. try_into ( ) . map_err ( Into :: into) ;
190
+ self . headers . insert ( key?, value?) ;
191
+
192
+ Ok ( self )
193
+ }
194
+
195
+ pub fn headers ( mut self , headers : HeaderMap ) -> Self {
196
+ self . headers = headers;
197
+ self
198
+ }
199
+
175
200
pub fn default_version_comparator <
176
201
F : Fn ( Version , RemoteRelease ) -> bool + Send + Sync + ' static ,
177
202
> (
@@ -187,6 +212,7 @@ impl Builder {
187
212
let target = self . target ;
188
213
let version_comparator = self . default_version_comparator ;
189
214
let installer_args = self . installer_args ;
215
+ let headers = self . headers ;
190
216
PluginBuilder :: < R , Config > :: new ( "updater" )
191
217
. setup ( move |app, api| {
192
218
let mut config = api. config ( ) . clone ( ) ;
@@ -200,6 +226,7 @@ impl Builder {
200
226
target,
201
227
config,
202
228
version_comparator,
229
+ headers,
203
230
} ) ;
204
231
Ok ( ( ) )
205
232
} )
0 commit comments