mirror of
https://github.com/twitter/the-algorithm.git
synced 2024-06-26 13:06:05 +02:00
30 lines
1.3 KiB
Scala
30 lines
1.3 KiB
Scala
|
package com.twitter.product_mixer.component_library.selector
|
||
|
|
||
|
import com.twitter.product_mixer.core.functional_component.common.AllPipelines
|
||
|
import com.twitter.product_mixer.core.functional_component.common.CandidateScope
|
||
|
import com.twitter.product_mixer.core.functional_component.common.CandidateScope.PartitionedCandidates
|
||
|
import com.twitter.product_mixer.core.functional_component.selector.Selector
|
||
|
import com.twitter.product_mixer.core.functional_component.selector.SelectorResult
|
||
|
import com.twitter.product_mixer.core.model.common.presentation.CandidateWithDetails
|
||
|
import com.twitter.product_mixer.core.pipeline.PipelineQuery
|
||
|
|
||
|
/**
|
||
|
* Drops all Candidates on the `remainingCandidates` side which are in the [[pipelineScope]]
|
||
|
*
|
||
|
* This is typically used as a placeholder when templating out a new pipeline or
|
||
|
* as a simple filter to drop candidates based only on the [[CandidateScope]]
|
||
|
*/
|
||
|
case class DropAllCandidates(override val pipelineScope: CandidateScope = AllPipelines)
|
||
|
extends Selector[PipelineQuery] {
|
||
|
|
||
|
override def apply(
|
||
|
query: PipelineQuery,
|
||
|
remainingCandidates: Seq[CandidateWithDetails],
|
||
|
result: Seq[CandidateWithDetails]
|
||
|
): SelectorResult = {
|
||
|
val PartitionedCandidates(inScope, outOfScope) = pipelineScope.partition(remainingCandidates)
|
||
|
|
||
|
SelectorResult(remainingCandidates = outOfScope, result = result)
|
||
|
}
|
||
|
}
|