Skip to content

Commit df368ea

Browse files
Split back CrateDetails into another struct for rendering
1 parent 9d0dfb7 commit df368ea

File tree

1 file changed

+87
-16
lines changed

1 file changed

+87
-16
lines changed

src/web/crate_details.rs

Lines changed: 87 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -31,9 +31,6 @@ use serde_json::Value;
3131
use std::sync::Arc;
3232

3333
// TODO: Add target name and versions
34-
35-
#[derive(Template)]
36-
#[template(path = "crate/details.html")]
3734
#[derive(Debug, Clone, PartialEq)]
3835
pub(crate) struct CrateDetails {
3936
pub(crate) name: String,
@@ -68,12 +65,6 @@ pub(crate) struct CrateDetails {
6865
pub(crate) crate_id: i32,
6966
/// Database id for this release
7067
pub(crate) release_id: i32,
71-
pub(crate) csp_nonce: String,
72-
}
73-
74-
impl_axum_webpage! {
75-
CrateDetails,
76-
cpu_intensive_rendering = true,
7768
}
7869

7970
#[derive(Debug, Clone, PartialEq)]
@@ -259,7 +250,6 @@ impl CrateDetails {
259250
items_with_examples: krate.items_with_examples,
260251
crate_id: krate.crate_id,
261252
release_id: krate.release_id,
262-
csp_nonce: String::new(),
263253
};
264254

265255
// get owners
@@ -351,11 +341,6 @@ impl CrateDetails {
351341
pub fn latest_release(&self) -> Result<&Release> {
352342
latest_release(&self.releases).ok_or_else(|| anyhow!("crate without releases"))
353343
}
354-
355-
// Used by templates.
356-
pub(crate) fn use_direct_platform_links(&self) -> bool {
357-
true
358-
}
359344
}
360345

361346
pub(crate) fn latest_release(releases: &[Release]) -> Option<&Release> {
@@ -425,6 +410,45 @@ pub(crate) async fn releases_for_crate(
425410
Ok(releases)
426411
}
427412

413+
#[derive(Template)]
414+
#[template(path = "crate/details.html")]
415+
#[derive(Debug, Clone, PartialEq)]
416+
struct CrateDetailsPage {
417+
version: Version,
418+
name: String,
419+
owners: Vec<(String, String, OwnerKind)>,
420+
metadata: MetaData,
421+
documented_items: Option<i32>,
422+
total_items: Option<i32>,
423+
total_items_needing_examples: Option<i32>,
424+
items_with_examples: Option<i32>,
425+
homepage_url: Option<String>,
426+
documentation_url: Option<String>,
427+
repository_url: Option<String>,
428+
repository_metadata: Option<RepositoryMetadata>,
429+
dependencies: Option<Value>,
430+
releases: Vec<Release>,
431+
readme: Option<String>,
432+
build_status: BuildStatus,
433+
rustdoc_status: Option<bool>,
434+
is_library: Option<bool>,
435+
last_successful_build: Option<String>,
436+
rustdoc: Option<String>, // this is description_long in database
437+
csp_nonce: String,
438+
}
439+
440+
impl CrateDetailsPage {
441+
// Used by templates.
442+
pub(crate) fn use_direct_platform_links(&self) -> bool {
443+
true
444+
}
445+
}
446+
447+
impl_axum_webpage! {
448+
CrateDetailsPage,
449+
cpu_intensive_rendering = true,
450+
}
451+
428452
#[derive(Deserialize, Clone, Debug)]
429453
pub(crate) struct CrateDetailHandlerParams {
430454
name: String,
@@ -461,7 +485,54 @@ pub(crate) async fn crate_details_handler(
461485
Err(e) => warn!("error fetching readme: {:?}", &e),
462486
}
463487

464-
let mut res = details.into_response();
488+
let CrateDetails {
489+
version,
490+
name,
491+
owners,
492+
metadata,
493+
documented_items,
494+
total_items,
495+
total_items_needing_examples,
496+
items_with_examples,
497+
homepage_url,
498+
documentation_url,
499+
repository_url,
500+
repository_metadata,
501+
dependencies,
502+
releases,
503+
readme,
504+
build_status,
505+
rustdoc_status,
506+
is_library,
507+
last_successful_build,
508+
rustdoc,
509+
..
510+
} = details;
511+
512+
let mut res = CrateDetailsPage {
513+
version,
514+
name,
515+
owners,
516+
metadata,
517+
documented_items,
518+
total_items,
519+
total_items_needing_examples,
520+
items_with_examples,
521+
homepage_url,
522+
documentation_url,
523+
repository_url,
524+
repository_metadata,
525+
dependencies,
526+
releases,
527+
readme,
528+
build_status,
529+
rustdoc_status,
530+
is_library,
531+
last_successful_build,
532+
rustdoc,
533+
csp_nonce: String::new(),
534+
}
535+
.into_response();
465536
res.extensions_mut()
466537
.insert::<CachePolicy>(if req_version.is_latest() {
467538
CachePolicy::ForeverInCdn

0 commit comments

Comments
 (0)