override def apply()

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)
  }