Skip to content

Commit 6edda86

Browse files
committed
controllers/krate/search: use named fields seek
1 parent 9f57dd4 commit 6edda86

File tree

1 file changed

+48
-27
lines changed

1 file changed

+48
-27
lines changed

src/controllers/krate/search.rs

Lines changed: 48 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -412,12 +412,12 @@ impl<'a> FilterParams<'a> {
412412
.single_value()
413413
};
414414
let conditions: Vec<BoxedCondition<'_>> = match *seek_payload {
415-
SeekPayload::Name(Name(id)) => {
415+
SeekPayload::Name(Name { id }) => {
416416
// Equivalent of:
417417
// `WHERE name > name'`
418418
vec![Box::new(crates::name.nullable().gt(crate_name_by_id(id)))]
419419
}
420-
SeekPayload::New(New(created_at, id)) => {
420+
SeekPayload::New(New { created_at, id }) => {
421421
// Equivalent of:
422422
// `WHERE (created_at = created_at' AND id < id') OR created_at < created_at'`
423423
vec![
@@ -430,7 +430,7 @@ impl<'a> FilterParams<'a> {
430430
Box::new(crates::created_at.lt(created_at).nullable()),
431431
]
432432
}
433-
SeekPayload::RecentUpdates(RecentUpdates(updated_at, id)) => {
433+
SeekPayload::RecentUpdates(RecentUpdates { updated_at, id }) => {
434434
// Equivalent of:
435435
// `WHERE (updated_at = updated_at' AND id < id') OR updated_at < updated_at'`
436436
vec![
@@ -443,7 +443,10 @@ impl<'a> FilterParams<'a> {
443443
Box::new(crates::updated_at.lt(updated_at).nullable()),
444444
]
445445
}
446-
SeekPayload::RecentDownloads(RecentDownloads(recent_downloads, id)) => {
446+
SeekPayload::RecentDownloads(RecentDownloads {
447+
recent_downloads,
448+
id,
449+
}) => {
447450
// Equivalent of:
448451
// for recent_downloads is not None:
449452
// `WHERE (recent_downloads = recent_downloads' AND id < id')
@@ -477,7 +480,7 @@ impl<'a> FilterParams<'a> {
477480
}
478481
}
479482
}
480-
SeekPayload::Downloads(Downloads(downloads, id)) => {
483+
SeekPayload::Downloads(Downloads { downloads, id }) => {
481484
// Equivalent of:
482485
// `WHERE (downloads = downloads' AND id < id') OR downloads < downloads'`
483486
vec![
@@ -490,7 +493,7 @@ impl<'a> FilterParams<'a> {
490493
Box::new(crate_downloads::downloads.lt(downloads).nullable()),
491494
]
492495
}
493-
SeekPayload::Query(Query(exact_match, id)) => {
496+
SeekPayload::Query(Query { exact_match, id }) => {
494497
// Equivalent of:
495498
// `WHERE (exact_match = exact_match' AND name < name') OR exact_match <
496499
// exact_match'`
@@ -506,7 +509,11 @@ impl<'a> FilterParams<'a> {
506509
Box::new(name_exact_match.lt(exact_match).nullable()),
507510
]
508511
}
509-
SeekPayload::Relevance(Relevance(exact, rank_in, id)) => {
512+
SeekPayload::Relevance(Relevance {
513+
exact_match: exact,
514+
rank: rank_in,
515+
id,
516+
}) => {
510517
// Equivalent of:
511518
// `WHERE (exact_match = exact_match' AND rank = rank' AND name > name')
512519
// OR (exact_match = exact_match' AND rank < rank')
@@ -553,13 +560,13 @@ mod seek {
553560

554561
seek! {
555562
pub enum Seek {
556-
Name(i32)
557-
New(#[serde(with="ts_microseconds")] chrono::NaiveDateTime, i32)
558-
RecentUpdates(#[serde(with="ts_microseconds")] chrono::NaiveDateTime, i32)
559-
RecentDownloads(Option<i64>, i32)
560-
Downloads(i64, i32)
561-
Query(bool, i32)
562-
Relevance(bool, f32, i32)
563+
Name{ id: i32 }
564+
New{#[serde(with="ts_microseconds")] created_at: chrono::NaiveDateTime, id: i32}
565+
RecentUpdates{#[serde(with="ts_microseconds")] updated_at: chrono::NaiveDateTime, id: i32}
566+
RecentDownloads{recent_downloads: Option<i64>, id: i32}
567+
Downloads{downloads: i64, id: i32}
568+
Query{exact_match: bool, id: i32}
569+
Relevance{exact_match: bool, rank: f32, id: i32}
563570
}
564571
}
565572

@@ -568,20 +575,34 @@ mod seek {
568575
&self,
569576
record: &(Crate, bool, i64, Option<i64>, f32),
570577
) -> SeekPayload {
578+
let (
579+
Crate {
580+
id,
581+
updated_at,
582+
created_at,
583+
..
584+
},
585+
exact_match,
586+
downloads,
587+
recent_downloads,
588+
rank,
589+
) = *record;
590+
571591
match *self {
572-
Seek::Name => SeekPayload::Name(Name(record.0.id)),
573-
Seek::New => SeekPayload::New(New(record.0.created_at, record.0.id)),
574-
Seek::RecentUpdates => {
575-
SeekPayload::RecentUpdates(RecentUpdates(record.0.updated_at, record.0.id))
576-
}
577-
Seek::RecentDownloads => {
578-
SeekPayload::RecentDownloads(RecentDownloads(record.3, record.0.id))
579-
}
580-
Seek::Downloads => SeekPayload::Downloads(Downloads(record.2, record.0.id)),
581-
Seek::Query => SeekPayload::Query(Query(record.1, record.0.id)),
582-
Seek::Relevance => {
583-
SeekPayload::Relevance(Relevance(record.1, record.4, record.0.id))
584-
}
592+
Seek::Name => SeekPayload::Name(Name { id }),
593+
Seek::New => SeekPayload::New(New { created_at, id }),
594+
Seek::RecentUpdates => SeekPayload::RecentUpdates(RecentUpdates { updated_at, id }),
595+
Seek::RecentDownloads => SeekPayload::RecentDownloads(RecentDownloads {
596+
recent_downloads,
597+
id,
598+
}),
599+
Seek::Downloads => SeekPayload::Downloads(Downloads { downloads, id }),
600+
Seek::Query => SeekPayload::Query(Query { exact_match, id }),
601+
Seek::Relevance => SeekPayload::Relevance(Relevance {
602+
exact_match,
603+
rank,
604+
id,
605+
}),
585606
}
586607
}
587608
}

0 commit comments

Comments
 (0)