the-algorithm/home-mixer/server/src/main/scala/com/twitter/home_mixer/marshaller/request/HomeMixerProductContextUnma...

63 lines
2.6 KiB
Scala

package com.twitter.home_mixer.marshaller.request
import com.twitter.home_mixer.model.request.FollowingProductContext
import com.twitter.home_mixer.model.request.ForYouProductContext
import com.twitter.home_mixer.model.request.ListRecommendedUsersProductContext
import com.twitter.home_mixer.model.request.ListTweetsProductContext
import com.twitter.home_mixer.model.request.ScoredTweetsProductContext
import com.twitter.home_mixer.model.request.SubscribedProductContext
import com.twitter.home_mixer.{thriftscala => t}
import com.twitter.product_mixer.core.model.marshalling.request.ProductContext
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class HomeMixerProductContextUnmarshaller @Inject() (
deviceContextUnmarshaller: DeviceContextUnmarshaller) {
def apply(productContext: t.ProductContext): ProductContext = productContext match {
case t.ProductContext.Following(p) =>
FollowingProductContext(
deviceContext = p.deviceContext.map(deviceContextUnmarshaller(_)),
seenTweetIds = p.seenTweetIds,
dspClientContext = p.dspClientContext
)
case t.ProductContext.ForYou(p) =>
ForYouProductContext(
deviceContext = p.deviceContext.map(deviceContextUnmarshaller(_)),
seenTweetIds = p.seenTweetIds,
dspClientContext = p.dspClientContext,
pushToHomeTweetId = p.pushToHomeTweetId
)
case t.ProductContext.ListManagement(p) =>
throw new UnsupportedOperationException(s"This product is no longer used")
case t.ProductContext.ScoredTweets(p) =>
ScoredTweetsProductContext(
deviceContext = p.deviceContext.map(deviceContextUnmarshaller(_)),
seenTweetIds = p.seenTweetIds,
servedTweetIds = p.servedTweetIds,
backfillTweetIds = p.backfillTweetIds
)
case t.ProductContext.ListTweets(p) =>
ListTweetsProductContext(
listId = p.listId,
deviceContext = p.deviceContext.map(deviceContextUnmarshaller(_)),
dspClientContext = p.dspClientContext
)
case t.ProductContext.ListRecommendedUsers(p) =>
ListRecommendedUsersProductContext(
listId = p.listId,
selectedUserIds = p.selectedUserIds,
excludedUserIds = p.excludedUserIds,
listName = p.listName
)
case t.ProductContext.Subscribed(p) =>
SubscribedProductContext(
deviceContext = p.deviceContext.map(deviceContextUnmarshaller(_)),
seenTweetIds = p.seenTweetIds,
)
case t.ProductContext.UnknownUnionField(field) =>
throw new UnsupportedOperationException(s"Unknown display context: ${field.field.name}")
}
}