Skip to content

Commit a16318d

Browse files
committed
Only require &str for encoding a Version
This way we don't have to always load the entire crate into memory elsewhere
1 parent 54db960 commit a16318d

File tree

2 files changed

+11
-14
lines changed

2 files changed

+11
-14
lines changed

src/krate.rs

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,10 +117,6 @@ impl Crate {
117117
Ok(rows.map(|r| Model::from_row(&r)).collect())
118118
}
119119

120-
pub fn dl_path(&self, version: &str) -> String {
121-
format!("/crates/{}/{}/download", self.name, version)
122-
}
123-
124120
pub fn s3_path(&self, version: &str) -> String {
125121
format!("/pkg/{}/{}-{}.tar.gz", self.name, self.name, version)
126122
}
@@ -332,7 +328,9 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
332328
struct R { krate: EncodableCrate, versions: Vec<EncodableVersion>, }
333329
Ok(req.json(&R {
334330
krate: krate.clone().encodable(versions.iter().map(|v| v.id).collect()),
335-
versions: versions.into_iter().map(|v| v.encodable(&krate)).collect(),
331+
versions: versions.into_iter().map(|v| {
332+
v.encodable(krate.name.as_slice())
333+
}).collect(),
336334
}))
337335
}
338336

src/version.rs

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -83,25 +83,24 @@ impl Version {
8383
semver::Version::parse(version).is_ok()
8484
}
8585

86-
pub fn encodable(self, krate: &Crate) -> EncodableVersion {
87-
let Version { id, crate_id, num, updated_at, created_at,
86+
pub fn encodable(self, crate_name: &str) -> EncodableVersion {
87+
let Version { id, crate_id: _, num, updated_at, created_at,
8888
downloads, features } = self;
89-
assert_eq!(krate.id, crate_id);
9089
let num = num.to_string();
9190
EncodableVersion {
92-
dl_path: krate.dl_path(num.as_slice()),
91+
dl_path: format!("/crates/{}/{}/download", crate_name, num),
9392
num: num.clone(),
9493
id: id,
95-
krate: krate.name.clone(),
94+
krate: crate_name.to_string(),
9695
updated_at: ::encode_time(updated_at),
9796
created_at: ::encode_time(created_at),
9897
downloads: downloads,
9998
features: features,
10099
links: VersionLinks {
101100
dependencies: format!("/crates/{}/{}/dependencies",
102-
krate.name, num),
101+
crate_name, num),
103102
version_downloads: format!("/crates/{}/{}/downloads",
104-
krate.name, num),
103+
crate_name, num),
105104
},
106105
}
107106
}
@@ -206,7 +205,7 @@ pub fn index(req: &mut Request) -> CargoResult<Response> {
206205
// And respond!
207206
let versions = versions.into_iter().map(|v| {
208207
let id = v.crate_id;
209-
v.encodable(map.find(&id).unwrap())
208+
v.encodable(map.find(&id).unwrap().as_slice())
210209
}).collect();
211210

212211
#[deriving(Encodable)]
@@ -223,7 +222,7 @@ pub fn show(req: &mut Request) -> CargoResult<Response> {
223222

224223
#[deriving(Encodable)]
225224
struct R { version: EncodableVersion }
226-
Ok(req.json(&R { version: version.encodable(&krate) }))
225+
Ok(req.json(&R { version: version.encodable(krate.name.as_slice()) }))
227226
}
228227

229228
fn version_and_crate(req: &mut Request) -> CargoResult<(Version, Crate)> {

0 commit comments

Comments
 (0)