@@ -75,7 +75,8 @@ async fn latest_release(client: &Client) -> Result<Release, UpdateError> {
75
75
. contents
76
76
. into_iter ( )
77
77
. flat_map ( Content :: release)
78
- . max ( )
78
+ . filter ( |release| release. key . contains ( effective_target ( ) ) )
79
+ . max_by_key ( |release| release. version . clone ( ) )
79
80
. ok_or ( UpdateError :: NoReleases )
80
81
}
81
82
@@ -93,18 +94,15 @@ struct ListBucket {
93
94
contents : Vec < Content > ,
94
95
}
95
96
96
- #[ derive( Debug , Deserialize ) ]
97
+ #[ derive( Debug , Clone , Deserialize ) ]
97
98
#[ serde( rename_all = "PascalCase" ) ]
98
99
struct Content {
99
100
key : String ,
100
101
}
101
102
102
103
impl Content {
103
104
fn release ( self ) -> Option < Release > {
104
- let ( version, filename) = self . key . split_once ( '/' ) ?;
105
- if !filename. contains ( effective_target ( ) ) {
106
- return None ;
107
- }
105
+ let ( version, _filename) = self . key . split_once ( '/' ) ?;
108
106
let version = version. strip_prefix ( 'v' ) ?;
109
107
Some ( Release {
110
108
version : version. parse ( ) . ok ( ) ?,
@@ -113,7 +111,7 @@ impl Content {
113
111
}
114
112
}
115
113
116
- #[ derive( Debug , Ord , PartialOrd , Eq , PartialEq ) ]
114
+ #[ derive( Debug , Clone ) ]
117
115
struct Release {
118
116
version : Version ,
119
117
key : String ,
@@ -170,3 +168,33 @@ impl From<Elapsed> for UpdateError {
170
168
UpdateError :: Timeout
171
169
}
172
170
}
171
+
172
+ #[ cfg( test) ]
173
+ mod tests {
174
+ use super :: * ;
175
+
176
+ #[ test]
177
+ fn test_list_bucket ( ) {
178
+ let sample = r#"
179
+ <?xml version="1.0" encoding="UTF-8"?>
180
+ <ListBucketResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/">
181
+ <Name>fishnet-releases</Name>
182
+ <Prefix/>
183
+ <KeyCount>74</KeyCount>
184
+ <MaxKeys>1000</MaxKeys>
185
+ <IsTruncated>false</IsTruncated>
186
+ <Contents>
187
+ <Key>v2.6.10/fishnet-v2.6.10-aarch64-apple-darwin</Key>
188
+ <LastModified>2023-05-01T16:27:52.000Z</LastModified>
189
+ <ETag>"f7ed5e695e421adbf153ee35a4d46fca-6"</ETag>
190
+ <Size>30471464</Size>
191
+ <StorageClass>STANDARD</StorageClass>
192
+ </Contents>
193
+ </ListBucketResult>"# ;
194
+
195
+ let bucket: ListBucket = quick_xml:: de:: from_str ( sample) . unwrap ( ) ;
196
+ let release = bucket. contents [ 0 ] . clone ( ) . release ( ) . unwrap ( ) ;
197
+ assert_eq ! ( release. version, Version :: new( 2 , 6 , 10 ) ) ;
198
+ assert_eq ! ( release. key, "v2.6.10/fishnet-v2.6.10-aarch64-apple-darwin" ) ;
199
+ }
200
+ }
0 commit comments