Skip to content

Commit 9423817

Browse files
authored
Merge EncodableCategoryWithSubcategories into EncodableCategory (#10692)
1 parent d59c65b commit 9423817

File tree

3 files changed

+19
-49
lines changed

3 files changed

+19
-49
lines changed

src/controllers/category.rs

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ use crate::app::AppState;
33
use crate::models::Category;
44
use crate::schema::categories;
55
use crate::util::errors::AppResult;
6-
use crate::views::{EncodableCategory, EncodableCategoryWithSubcategories};
6+
use crate::views::EncodableCategory;
77
use axum::extract::{FromRequestParts, Path, Query};
88
use axum_extra::json;
99
use axum_extra::response::ErasedJson;
@@ -89,19 +89,11 @@ pub async fn find_category(state: AppState, Path(slug): Path<String>) -> AppResu
8989
.map(Category::into)
9090
.collect();
9191

92-
let cat = EncodableCategory::from(cat);
93-
let cat_with_subcats = EncodableCategoryWithSubcategories {
94-
id: cat.id,
95-
category: cat.category,
96-
slug: cat.slug,
97-
description: cat.description,
98-
created_at: cat.created_at,
99-
crates_cnt: cat.crates_cnt,
100-
subcategories: subcats,
101-
parent_categories: parents,
102-
};
103-
104-
Ok(json!({ "category": cat_with_subcats }))
92+
let mut category = EncodableCategory::from(cat);
93+
category.subcategories = Some(subcats);
94+
category.parent_categories = Some(parents);
95+
96+
Ok(json!({ "category": category }))
10597
}
10698

10799
/// List all available category slugs.

src/tests/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::models::{Crate, CrateOwner, NewCategory, NewTeam, NewUser, Team, User};
22
use crate::tests::util::{RequestHelper, TestApp};
33
use crate::views::{
4-
EncodableCategory, EncodableCategoryWithSubcategories, EncodableCrate, EncodableKeyword,
5-
EncodableOwner, EncodableVersion, GoodCrate,
4+
EncodableCategory, EncodableCrate, EncodableKeyword, EncodableOwner, EncodableVersion,
5+
GoodCrate,
66
};
77

88
use crate::tests::util::github::next_gh_id;
@@ -67,7 +67,7 @@ pub struct OwnersResponse {
6767
}
6868
#[derive(Deserialize)]
6969
pub struct CategoryResponse {
70-
category: EncodableCategoryWithSubcategories,
70+
category: EncodableCategory,
7171
}
7272
#[derive(Deserialize)]
7373
pub struct CategoryListResponse {

src/views.rs

Lines changed: 10 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,12 @@ pub struct EncodableCategory {
1818
pub description: String,
1919
pub created_at: DateTime<Utc>,
2020
pub crates_cnt: i32,
21+
22+
#[serde(skip_serializing_if = "Option::is_none")]
23+
pub subcategories: Option<Vec<EncodableCategory>>,
24+
25+
#[serde(skip_serializing_if = "Option::is_none")]
26+
pub parent_categories: Option<Vec<EncodableCategory>>,
2127
}
2228

2329
impl From<Category> for EncodableCategory {
@@ -37,22 +43,12 @@ impl From<Category> for EncodableCategory {
3743
created_at,
3844
crates_cnt,
3945
category: category.rsplit("::").collect::<Vec<_>>()[0].to_string(),
46+
subcategories: None,
47+
parent_categories: None,
4048
}
4149
}
4250
}
4351

44-
#[derive(Serialize, Deserialize, Debug)]
45-
pub struct EncodableCategoryWithSubcategories {
46-
pub id: String,
47-
pub category: String,
48-
pub slug: String,
49-
pub description: String,
50-
pub created_at: DateTime<Utc>,
51-
pub crates_cnt: i32,
52-
pub subcategories: Vec<EncodableCategory>,
53-
pub parent_categories: Vec<EncodableCategory>,
54-
}
55-
5652
/// The serialization format for the `CrateOwnerInvitation` model.
5753
#[derive(Deserialize, Serialize, Debug, PartialEq, Eq)]
5854
pub struct EncodableCrateOwnerInvitationV1 {
@@ -701,26 +697,8 @@ mod tests {
701697
.and_hms_opt(14, 23, 11)
702698
.unwrap()
703699
.and_utc(),
704-
};
705-
let json = serde_json::to_string(&cat).unwrap();
706-
assert_some!(json.as_str().find(r#""created_at":"2017-01-06T14:23:11Z""#));
707-
}
708-
709-
#[test]
710-
fn category_with_sub_dates_serializes_to_rfc3339() {
711-
let cat = EncodableCategoryWithSubcategories {
712-
id: "".to_string(),
713-
category: "".to_string(),
714-
slug: "".to_string(),
715-
description: "".to_string(),
716-
crates_cnt: 1,
717-
created_at: NaiveDate::from_ymd_opt(2017, 1, 6)
718-
.unwrap()
719-
.and_hms_opt(14, 23, 11)
720-
.unwrap()
721-
.and_utc(),
722-
subcategories: vec![],
723-
parent_categories: vec![],
700+
subcategories: None,
701+
parent_categories: None,
724702
};
725703
let json = serde_json::to_string(&cat).unwrap();
726704
assert_some!(json.as_str().find(r#""created_at":"2017-01-06T14:23:11Z""#));

0 commit comments

Comments
 (0)