42 lines
1.7 KiB
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)
|
|
}
|
|
}
|