diff --git a/src/controllers/krate/metadata.rs b/src/controllers/krate/metadata.rs index 9d43972ed69..d2cbbf556b5 100644 --- a/src/controllers/krate/metadata.rs +++ b/src/controllers/krate/metadata.rs @@ -247,7 +247,7 @@ pub fn reverse_dependencies(req: &mut dyn RequestExt) -> EndpointResult { let (rev_deps, total) = krate.reverse_dependencies(&*conn, pagination_options)?; let rev_deps: Vec<_> = rev_deps .into_iter() - .map(|dep| dep.encodable(&krate.name)) + .map(|dep| EncodableDependency::from_reverse_dep(dep, &krate.name)) .collect(); let version_ids: Vec = rev_deps.iter().map(|dep| dep.version_id).collect(); diff --git a/src/controllers/version/metadata.rs b/src/controllers/version/metadata.rs index 18f24168471..9b4dafbbf70 100644 --- a/src/controllers/version/metadata.rs +++ b/src/controllers/version/metadata.rs @@ -26,7 +26,7 @@ pub fn dependencies(req: &mut dyn RequestExt) -> EndpointResult { let deps = version.dependencies(&conn)?; let deps = deps .into_iter() - .map(|(dep, crate_name)| dep.encodable(&crate_name, None)) + .map(|(dep, crate_name)| EncodableDependency::from_dep(dep, &crate_name)) .collect(); #[derive(Serialize)] diff --git a/src/models/dependency.rs b/src/models/dependency.rs index 14eca5bec95..d89bcf77950 100644 --- a/src/models/dependency.rs +++ b/src/models/dependency.rs @@ -5,7 +5,7 @@ use crate::util::errors::{cargo_err, AppResult}; use crate::models::{Crate, Version}; use crate::schema::*; -use crate::views::{EncodableCrateDependency, EncodableDependency}; +use crate::views::EncodableCrateDependency; pub const WILDCARD_ERROR_MESSAGE: &str = "wildcard (`*`) dependency constraints are not allowed \ on crates.io. See https://doc.rust-lang.org/cargo/faq.html#can-\ @@ -49,31 +49,6 @@ pub enum DependencyKind { // if you add a kind here, be sure to update `from_row` below. } -impl Dependency { - // `downloads` need only be specified when generating a reverse dependency - pub fn encodable(self, crate_name: &str, downloads: Option) -> EncodableDependency { - EncodableDependency { - id: self.id, - version_id: self.version_id, - crate_id: crate_name.into(), - req: self.req, - optional: self.optional, - default_features: self.default_features, - features: self.features, - target: self.target, - kind: self.kind, - downloads: downloads.unwrap_or(0), - } - } -} - -impl ReverseDependency { - pub fn encodable(self, crate_name: &str) -> EncodableDependency { - self.dependency - .encodable(crate_name, Some(self.crate_downloads)) - } -} - pub fn add_dependencies( conn: &PgConnection, deps: &[EncodableCrateDependency], diff --git a/src/views.rs b/src/views.rs index 6a80dd27ee7..7012d815c1e 100644 --- a/src/views.rs +++ b/src/views.rs @@ -3,7 +3,8 @@ use std::collections::HashMap; use crate::github; use crate::models::{ - Badge, Category, CreatedApiToken, DependencyKind, Keyword, Owner, Team, User, VersionDownload, + Badge, Category, CreatedApiToken, Dependency, DependencyKind, Keyword, Owner, + ReverseDependency, Team, User, VersionDownload, }; use crate::util::rfc3339; @@ -95,6 +96,33 @@ pub struct EncodableDependency { pub downloads: i32, } +impl EncodableDependency { + pub fn from_dep(dependency: Dependency, crate_name: &str) -> Self { + Self::encode(dependency, crate_name, None) + } + + pub fn from_reverse_dep(rev_dep: ReverseDependency, crate_name: &str) -> Self { + let dependency = rev_dep.dependency; + Self::encode(dependency, crate_name, Some(rev_dep.crate_downloads)) + } + + // `downloads` need only be specified when generating a reverse dependency + fn encode(dependency: Dependency, crate_name: &str, downloads: Option) -> Self { + Self { + id: dependency.id, + version_id: dependency.version_id, + crate_id: crate_name.into(), + req: dependency.req, + optional: dependency.optional, + default_features: dependency.default_features, + features: dependency.features, + target: dependency.target, + kind: dependency.kind, + downloads: downloads.unwrap_or(0), + } + } +} + #[derive(Serialize, Deserialize, Debug)] pub struct EncodableVersionDownload { pub version: i32,