Skip to content

Commit 28256a9

Browse files
committed
fix
1 parent d471f30 commit 28256a9

File tree

3 files changed

+28
-44
lines changed

3 files changed

+28
-44
lines changed

src/db/add_package.rs

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{
22
db::types::{
3-
BuildId, BuildStatus, CrateId, Feature, ReleaseId, dependencies::ReleaseDependencyList,
3+
BuildId, BuildStatus, CrateId, Feature, ReleaseId, dependencies::ReleaseDependency,
44
version::Version,
55
},
66
docbuilder::DocCoverage,
@@ -48,7 +48,12 @@ pub(crate) async fn finish_release(
4848
source_size: u64,
4949
) -> Result<()> {
5050
debug!("updating release data");
51-
let dependencies: ReleaseDependencyList = metadata_pkg.dependencies.clone().into();
51+
let dependencies: Vec<ReleaseDependency> = metadata_pkg
52+
.dependencies
53+
.iter()
54+
.cloned()
55+
.map(Into::into)
56+
.collect();
5257
let rustdoc = get_rustdoc(metadata_pkg, source_dir).unwrap_or(None);
5358
let readme = get_readme(metadata_pkg, source_dir).unwrap_or(None);
5459
let features = get_features(metadata_pkg);

src/db/types/dependencies.rs

Lines changed: 10 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
use cargo_metadata::{Dependency, DependencyKind};
2-
use derive_more::Deref;
32
use semver::VersionReq;
43
use serde::{Deserialize, Serialize};
54

@@ -55,33 +54,18 @@ impl Serialize for ReleaseDependency {
5554
}
5655
}
5756

58-
#[derive(Debug, Clone, Serialize, Deserialize, Default, Deref)]
59-
#[serde(transparent)]
60-
pub(crate) struct ReleaseDependencyList(Vec<ReleaseDependency>);
61-
62-
impl<I> From<I> for ReleaseDependencyList
63-
where
64-
I: IntoIterator<Item = Dependency>,
65-
{
66-
fn from(deps: I) -> Self {
67-
Self(
68-
deps.into_iter()
69-
.map(|dep| ReleaseDependency {
70-
name: dep.name,
71-
req: dep.req,
72-
kind: dep.kind,
73-
optional: dep.optional,
74-
})
75-
.collect(),
76-
)
57+
impl From<Dependency> for ReleaseDependency {
58+
fn from(dep: Dependency) -> Self {
59+
ReleaseDependency {
60+
name: dep.name,
61+
req: dep.req,
62+
kind: dep.kind,
63+
optional: dep.optional,
64+
}
7765
}
7866
}
7967

80-
// impl ReleaseDependencyList {
81-
// pub(crate) fn into_iter_dependencies(self) -> impl Iterator<Item = Dependency> {
82-
// self.0.into_iter().map(|rd| rd.0)
83-
// }
84-
// }
68+
pub(crate) type ReleaseDependencyList = Vec<ReleaseDependency>;
8569

8670
#[cfg(test)]
8771
mod tests {
@@ -134,7 +118,7 @@ mod tests {
134118
expected_optional: bool,
135119
) -> Result<()> {
136120
let deps: ReleaseDependencyList = serde_json::from_str(input)?;
137-
let [dep] = deps.0.as_slice() else {
121+
let [dep] = deps.as_slice() else {
138122
panic!("expected exactly one dependency");
139123
};
140124

src/web/crate_details.rs

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ use axum::{
2727
extract::Extension,
2828
response::{IntoResponse, Response as AxumResponse},
2929
};
30-
use cargo_metadata::Dependency;
3130
use chrono::{DateTime, Utc};
3231
use futures_util::stream::TryStreamExt;
3332
use log::warn;
@@ -41,7 +40,7 @@ pub(crate) struct CrateDetails {
4140
pub(crate) version: Version,
4241
pub(crate) description: Option<String>,
4342
pub(crate) owners: Vec<(String, String, OwnerKind)>,
44-
pub(crate) dependencies: Vec<Dependency>,
43+
pub(crate) dependencies: ReleaseDependencyList,
4544
readme: Option<String>,
4645
rustdoc: Option<String>, // this is description_long in database
4746
release_time: Option<DateTime<Utc>>,
@@ -235,19 +234,15 @@ impl CrateDetails {
235234

236235
let parsed_license = krate.license.as_deref().map(super::licenses::parse_license);
237236

238-
let dependencies = if let Some(value) = krate.dependencies {
239-
match serde_json::from_value::<ReleaseDependencyList>(value) {
240-
Ok(list) => list.into_iter_dependencies().collect(),
241-
Err(_) => {
242-
// NOTE: we sometimes have invalid semver-requirement strings the database
243-
// (at the time writing, 14 releases out of 2 million).
244-
// We silently ignore those here.
245-
Vec::new()
246-
}
247-
}
248-
} else {
249-
Vec::new()
250-
};
237+
let dependencies = krate
238+
.dependencies
239+
.map(|value| serde_json::from_value::<ReleaseDependencyList>(value))
240+
.transpose()
241+
// NOTE: we sometimes have invalid semver-requirement strings the database
242+
// (at the time writing, 14 releases out of 2 million).
243+
// We silently ignore those here.
244+
.unwrap_or_default()
245+
.unwrap_or_default();
251246

252247
let mut crate_details = CrateDetails {
253248
name: krate.name,
@@ -450,7 +445,7 @@ struct CrateDetailsPage {
450445
documentation_url: Option<String>,
451446
repository_url: Option<String>,
452447
repository_metadata: Option<RepositoryMetadata>,
453-
dependencies: Vec<Dependency>,
448+
dependencies: ReleaseDependencyList,
454449
releases: Vec<Release>,
455450
readme: Option<String>,
456451
build_status: BuildStatus,

0 commit comments

Comments
 (0)