Skip to content

Commit d79d4f3

Browse files
committed
Update serde-xml-rs
1 parent a7df421 commit d79d4f3

File tree

3 files changed

+77
-9
lines changed

3 files changed

+77
-9
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tools/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ rebuilderd-common = { version= "=0.23.0", path="../common" }
3030
regex = "1.5.6"
3131
serde = { version="1.0.137", features=["derive"] }
3232
serde_json = "1.0.81"
33-
serde-xml-rs = "0.7"
33+
serde-xml-rs = "0.8"
3434
tar = "0.4.38"
3535
tokio = { version="1.19.2", features=["macros", "rt-multi-thread", "io-std", "io-util"] }
3636
toml = "0.9"

tools/src/schedule/fedora.rs

Lines changed: 74 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -64,24 +64,25 @@ pub async fn sync(http: &http::Client, sync: &PkgsSync) -> Result<Vec<PkgGroup>>
6464

6565
#[derive(Debug, Serialize, Deserialize)]
6666
pub struct RepomdXml {
67-
#[serde(rename = "$value")]
67+
#[serde(rename = "#content")]
6868
pub data: Vec<RepomdXmlItem>,
6969
}
7070

7171
#[derive(Debug, Serialize, Deserialize)]
7272
pub struct RepomdXmlItem {
73-
#[serde(rename = "type")]
73+
#[serde(rename = "@type")]
7474
pub item_type: Option<String>,
7575
pub location: Option<RepomdXmlLocation>,
7676
}
7777

7878
#[derive(Debug, Serialize, Deserialize)]
7979
pub struct RepomdXmlLocation {
80+
#[serde(rename = "@href")]
8081
pub href: String,
8182
}
8283

8384
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)?;
8586
let primary = list
8687
.data
8788
.into_iter()
@@ -94,13 +95,13 @@ fn get_primary_location_from_xml(bytes: &[u8]) -> Result<String> {
9495
}
9596

9697
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)?;
9899
Ok(list.packages)
99100
}
100101

101102
#[derive(Debug, Serialize, Deserialize)]
102103
pub struct PackagesXml {
103-
#[serde(rename = "$value")]
104+
#[serde(rename = "#content")]
104105
pub packages: Vec<PackagesXmlItem>,
105106
}
106107

@@ -126,19 +127,23 @@ impl Pkg for PackagesXmlItem {
126127

127128
#[derive(Debug, PartialEq, Serialize, Deserialize)]
128129
pub struct PackagesXmlItemVersion {
130+
#[serde(rename = "@epoch")]
129131
pub epoch: String,
132+
#[serde(rename = "@ver")]
130133
pub ver: String,
134+
#[serde(rename = "@rel")]
131135
pub rel: String,
132136
}
133137

134138
#[derive(Debug, PartialEq, Serialize, Deserialize)]
135139
pub struct PackagesXmlItemLocation {
140+
#[serde(rename = "@href")]
136141
pub href: String,
137142
}
138143

139144
#[derive(Debug, PartialEq, Serialize, Deserialize)]
140145
pub struct PackagesXmlItemMetadata {
141-
#[serde(rename = "sourcerpm")]
146+
#[serde(rename = "rpm:sourcerpm")]
142147
pub sourcerpm: String,
143148
}
144149

@@ -506,4 +511,67 @@ options, packing/unpacking FIASCO firmware format and more.</description>
506511
);
507512
Ok(())
508513
}
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+
}
509577
}

0 commit comments

Comments
 (0)