@@ -64,24 +64,25 @@ pub async fn sync(http: &http::Client, sync: &PkgsSync) -> Result<Vec<PkgGroup>>
64
64
65
65
#[ derive( Debug , Serialize , Deserialize ) ]
66
66
pub struct RepomdXml {
67
- #[ serde( rename = "$value " ) ]
67
+ #[ serde( rename = "#content " ) ]
68
68
pub data : Vec < RepomdXmlItem > ,
69
69
}
70
70
71
71
#[ derive( Debug , Serialize , Deserialize ) ]
72
72
pub struct RepomdXmlItem {
73
- #[ serde( rename = "type" ) ]
73
+ #[ serde( rename = "@ type" ) ]
74
74
pub item_type : Option < String > ,
75
75
pub location : Option < RepomdXmlLocation > ,
76
76
}
77
77
78
78
#[ derive( Debug , Serialize , Deserialize ) ]
79
79
pub struct RepomdXmlLocation {
80
+ #[ serde( rename = "@href" ) ]
80
81
pub href : String ,
81
82
}
82
83
83
84
fn get_primary_location_from_xml ( bytes : & [ u8 ] ) -> Result < String > {
84
- let list = serde_xml_rs:: from_reader :: < _ , RepomdXml > ( bytes) ?;
85
+ let list = serde_xml_rs:: from_reader :: < RepomdXml , _ > ( bytes) ?;
85
86
let primary = list
86
87
. data
87
88
. into_iter ( )
@@ -94,13 +95,13 @@ fn get_primary_location_from_xml(bytes: &[u8]) -> Result<String> {
94
95
}
95
96
96
97
fn parse_package_index < R : Read > ( r : R ) -> Result < Vec < PackagesXmlItem > > {
97
- let list = serde_xml_rs:: from_reader :: < _ , PackagesXml > ( r) ?;
98
+ let list = serde_xml_rs:: from_reader :: < PackagesXml , _ > ( r) ?;
98
99
Ok ( list. packages )
99
100
}
100
101
101
102
#[ derive( Debug , Serialize , Deserialize ) ]
102
103
pub struct PackagesXml {
103
- #[ serde( rename = "$value " ) ]
104
+ #[ serde( rename = "#content " ) ]
104
105
pub packages : Vec < PackagesXmlItem > ,
105
106
}
106
107
@@ -126,19 +127,23 @@ impl Pkg for PackagesXmlItem {
126
127
127
128
#[ derive( Debug , PartialEq , Serialize , Deserialize ) ]
128
129
pub struct PackagesXmlItemVersion {
130
+ #[ serde( rename = "@epoch" ) ]
129
131
pub epoch : String ,
132
+ #[ serde( rename = "@ver" ) ]
130
133
pub ver : String ,
134
+ #[ serde( rename = "@rel" ) ]
131
135
pub rel : String ,
132
136
}
133
137
134
138
#[ derive( Debug , PartialEq , Serialize , Deserialize ) ]
135
139
pub struct PackagesXmlItemLocation {
140
+ #[ serde( rename = "@href" ) ]
136
141
pub href : String ,
137
142
}
138
143
139
144
#[ derive( Debug , PartialEq , Serialize , Deserialize ) ]
140
145
pub struct PackagesXmlItemMetadata {
141
- #[ serde( rename = "sourcerpm" ) ]
146
+ #[ serde( rename = "rpm: sourcerpm" ) ]
142
147
pub sourcerpm : String ,
143
148
}
144
149
@@ -506,4 +511,67 @@ options, packing/unpacking FIASCO firmware format and more.</description>
506
511
) ;
507
512
Ok ( ( ) )
508
513
}
514
+
515
+ #[ test]
516
+ fn test_parse_repomd_package_list_item ( ) -> Result < ( ) > {
517
+ let bytes = br#"<?xml version="1.0" encoding="UTF-8"?>
518
+ <metadata xmlns="http://linux.duke.edu/metadata/common" xmlns:rpm="http://linux.duke.edu/metadata/rpm" packages="69222">
519
+ <name>0ad-data</name>
520
+ <arch>noarch</arch>
521
+ <version epoch="0" ver="0.0.26" rel="2.fc38"/>
522
+ <checksum type="sha256" pkgid="YES">9d4882481909c8c5cdd4b59988f17fc015d8703f5fbc587d07bd44038fbdb9ac</checksum>
523
+ <summary>The Data Files for 0 AD</summary>
524
+ <description>0 A.D. (pronounced "zero ey-dee") is a free, open-source, cross-platform
525
+ real-time strategy (RTS) game of ancient warfare. In short, it is a
526
+ historically-based war/economy game that allows players to relive or rewrite
527
+ the history of Western civilizations, focusing on the years between 500 B.C.
528
+ and 500 A.D. The project is highly ambitious, involving state-of-the-art 3D
529
+ graphics, detailed artwork, sound, and a flexible and powerful custom-built
530
+ game engine.
531
+
532
+ This package contains the 0ad data files.</description>
533
+ <packager>Fedora Project</packager>
534
+ <url>http://play0ad.com</url>
535
+ <time file="1674076145" build="1674071971"/>
536
+ <size package="1493523190" installed="3296032344" archive="3296040572"/>
537
+ <location href="Packages/0/0ad-data-0.0.26-2.fc38.noarch.rpm"/>
538
+ <format>
539
+ <rpm:license>CC-BY-SA</rpm:license>
540
+ <rpm:vendor>Fedora Project</rpm:vendor>
541
+ <rpm:group>Unspecified</rpm:group>
542
+ <rpm:buildhost>buildvm-a64-28.iad2.fedoraproject.org</rpm:buildhost>
543
+ <rpm:sourcerpm>0ad-data-0.0.26-2.fc38.src.rpm</rpm:sourcerpm>
544
+ <rpm:header-range start="11984" end="22489"/>
545
+ <rpm:provides>
546
+ <rpm:entry name="0ad-data" flags="EQ" epoch="0" ver="0.0.26" rel="2.fc38"/>
547
+ </rpm:provides>
548
+ <rpm:requires>
549
+ <rpm:entry name="dejavu-sans-fonts"/>
550
+ <rpm:entry name="dejavu-sans-mono-fonts"/>
551
+ </rpm:requires>
552
+ </format>
553
+ </metadata>
554
+ "# ;
555
+ let pkg = serde_xml_rs:: from_reader :: < PackagesXmlItem , _ > ( & bytes[ ..] ) ?;
556
+ assert_eq ! (
557
+ pkg,
558
+ PackagesXmlItem {
559
+ name: "0ad-data" . to_string( ) ,
560
+ arch: "noarch" . to_string( ) ,
561
+ version: PackagesXmlItemVersion {
562
+ epoch: "0" . to_string( ) ,
563
+ ver: "0.0.26" . to_string( ) ,
564
+ rel: "2.fc38" . to_string( ) ,
565
+ } ,
566
+ packager: "Fedora Project" . to_string( ) ,
567
+ location: PackagesXmlItemLocation {
568
+ href: "Packages/0/0ad-data-0.0.26-2.fc38.noarch.rpm" . to_string( ) ,
569
+ } ,
570
+ format: PackagesXmlItemMetadata {
571
+ sourcerpm: "0ad-data-0.0.26-2.fc38.src.rpm" . to_string( ) ,
572
+ }
573
+ } ,
574
+ ) ;
575
+ Ok ( ( ) )
576
+ }
509
577
}
0 commit comments