the-algorithm/tweetypie/common/src/scala/com/twitter/tweetypie/storage/Field.scala

42 lines
1.7 KiB
Scala

package com.twitter.tweetypie.storage
import com.twitter.tweetypie.additionalfields.AdditionalFields
import com.twitter.tweetypie.storage_internal.thriftscala.StoredTweet
import com.twitter.tweetypie.thriftscala.{Tweet => TpTweet}
/**
* A field of the stored version of a tweet to read, update, or delete.
*
* There is not a one-to-one correspondence between the fields ids of
* [[com.twitter.tweetypie.thriftscala.Tweet]] and
* [[com.twitter.tweetypie.storage_internal.thriftscala.StoredTweet]]. For example, in StoredTweet,
* the nsfwUser property is field 11; in Tweet, it is a property of the coreData struct in field 2.
* To circumvent the confusion of using one set of field ids or the other, callers use instances of
* [[Field]] to reference the part of the object to modify.
*/
class Field private[storage] (val id: Short) extends AnyVal {
override def toString: String = id.toString
}
/**
* NOTE: Make sure `AllUpdatableCompiledFields` is kept up to date when adding any new field
*/
object Field {
import AdditionalFields.isAdditionalFieldId
val Geo: Field = new Field(StoredTweet.GeoField.id)
val HasTakedown: Field = new Field(StoredTweet.HasTakedownField.id)
val NsfwUser: Field = new Field(StoredTweet.NsfwUserField.id)
val NsfwAdmin: Field = new Field(StoredTweet.NsfwAdminField.id)
val TweetypieOnlyTakedownCountryCodes: Field =
new Field(TpTweet.TweetypieOnlyTakedownCountryCodesField.id)
val TweetypieOnlyTakedownReasons: Field =
new Field(TpTweet.TweetypieOnlyTakedownReasonsField.id)
val AllUpdatableCompiledFields: Set[Field] = Set(Geo, HasTakedown, NsfwUser, NsfwAdmin)
def additionalField(id: Short): Field = {
require(isAdditionalFieldId(id), "field id must be in the additional field range")
new Field(id)
}
}