63 lines
2.6 KiB
Scala
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}")
|
|
}
|
|
}
|