in product-mixer/component-library/src/main/scala/com/twitter/product_mixer/component_library/premarshaller/slice/SliceDomainMarshaller.scala [40:95]
override def apply(
query: Query,
selections: Seq[CandidateWithDetails]
): Slice = {
val entries = selections.map {
case ItemCandidateWithDetails(_, Some(presentation: BaseSliceItemPresentation), _) =>
presentation.sliceItem
case candidateWithDetails @ ItemCandidateWithDetails(candidate, None, _) =>
val source = candidateWithDetails.source
candidate match {
case candidate: BaseTopicCandidate => TopicItem(candidate.id)
case candidate: BaseTweetCandidate => TweetItem(candidate.id)
case candidate: BaseUserCandidate => UserItem(candidate.id)
case candidate: TwitterListCandidate => TwitterListItem(candidate.id)
case candidate: DMConvoSearchCandidate =>
DMConvoSearchItem(candidate.id, candidate.lastReadableEventId)
case candidate: DMEventCandidate =>
DMEventItem(candidate.id)
case candidate: DMConvoCandidate =>
DMConvoItem(candidate.id, candidate.lastReadableEventId)
case candidate: DMMessageSearchCandidate => DMMessageSearchItem(candidate.id)
case candidate: QuerySuggestionCandidate =>
TypeaheadQuerySuggestionItem(candidate.id, candidate.metadata)
case candidate: TypeaheadEventCandidate =>
TypeaheadEventItem(candidate.id, candidate.metadata)
case candidate: AdUnitCandidate =>
AdItem(candidate.id, candidate.adAccountId)
case candidate: AdCreativeCandidate =>
AdCreativeItem(candidate.id, candidate.adType, candidate.adAccountId)
case candidate: AdGroupCandidate =>
AdGroupItem(candidate.id, candidate.adAccountId)
case candidate: CampaignCandidate =>
CampaignItem(candidate.id, candidate.adAccountId)
case candidate: FundingSourceCandidate =>
FundingSourceItem(candidate.id, candidate.adAccountId)
case candidate: CursorCandidate =>
// Cursors must contain a cursor type which is defined by the presentation. As a result,
// cursors are expected to be handled by the Some(presentation) case above, and must not
// fall into this case.
throw new UndecoratedCandidateDomainMarshallerException(candidate, source)
case candidate =>
throw new UnsupportedCandidateDomainMarshallerException(candidate, source)
}
case itemCandidateWithDetails @ ItemCandidateWithDetails(candidate, Some(presentation), _) =>
throw new UnsupportedPresentationDomainMarshallerException(
candidate,
presentation,
itemCandidateWithDetails.source)
case moduleCandidateWithDetails @ ModuleCandidateWithDetails(_, presentation, _) =>
throw new UnsupportedModuleDomainMarshallerException(
presentation,
moduleCandidateWithDetails.source)
}
buildSlice(query, entries)
}