twitter-stream-message 0.3.0

Types for Twitter Streaming API's messages.
Documentation
//! Tweets

use std::borrow::Cow;
use std::collections::HashMap;

use {Entities, Geometry, Place};
use types::{DateTime, FilterLevel, JsonValue, WithheldScope};
use user::{User, UserId};

/// Represents a Tweet.
///
/// # Reference
///
/// [Tweets — Twitter Developers][1]
///
/// [1]: https://dev.twitter.com/overview/api/tweets
#[derive(Clone, Debug, Deserialize, PartialEq)]
pub struct Tweet<'a> {
    // pub contributors: Option<_>, // deprecated

    /// Represents the geographic location of this Tweet as reported
    /// by the user or client application.
    pub coordinates: Option<Geometry>,

    /// UTC time when this Tweet was created.
    #[serde(deserialize_with = "::util::deserialize_datetime")]
    pub created_at: DateTime,

    // pub current_user_retweet: Option<StatusId>,

    /// Entities which have been parsed out of the text of the Tweet.
    #[serde(borrow)]
    pub entities: Entities<'a>,

    /// Indicates approximately how many times this Tweet has been liked
    /// by Twitter users.
    pub favorite_count: Option<u64>,

    /// *Perspectival* Indicates whether this Tweet has been liked
    /// by the authenticating user.
    pub favorited: Option<bool>,

    /// Indicates the maximum value of the `filter_level` parameter which may
    /// be used and still stream this Tweet. So a value of `Medium` will be
    /// streamed on `None`, `Low`, and `Medium` streams.
    #[serde(borrow)]
    pub filter_level: Option<FilterLevel<'a>>,

    // pub geo: _, // deprecated in favor of `coordinates` field.

    /// The integer representation of the unique identifier for this Tweet.
    pub id: StatusId,

    // pub id_str: String,

    /// If the represented Tweet is a reply, this field will contain
    /// the screen name of the original Tweet’s author.
    #[serde(borrow)]
    #[serde(default)]
    #[serde(deserialize_with = "::util::deserialize_opt_cow_str")]
    pub in_reply_to_screen_name: Option<Cow<'a, str>>,

    /// If the represented Tweet is a reply, this field will contain
    /// the integer representation of the original Tweet’s ID.
    pub in_reply_to_status_id: Option<StatusId>,

    // pub in_reply_to_status_id_str: Option<String>,

    /// If the represented Tweet is a reply, this field will contain
    /// the integer representation of the original Tweet’s author ID. This will
    /// not necessarily always be the user directly mentioned in the Tweet.
    pub in_reply_to_user_id: Option<UserId>,

    // pub in_reply_to_user_id_str: Option<String>,

    pub is_quote_status: bool,

    /// When present, indicates a [BCP 47][1] language identifier corresponding
    /// to the machine-detected language of the Tweet text,
    /// or `und` if no language could be detected.
    ///
    /// [1]: http://tools.ietf.org/html/bcp47
    #[serde(borrow)]
    #[serde(default)]
    #[serde(deserialize_with = "::util::deserialize_opt_cow_str")]
    pub lang: Option<Cow<'a, str>>,

    /// When present, indicates that the tweet is associated
    /// (but not necessarily originating from) a [Place][1].
    ///
    /// [1]: struct.Place.html
    #[serde(borrow)]
    pub place: Option<Place<'a>>,

    /// This field only surfaces when a Tweet contains a link.
    /// The meaning of the field doesn’t pertain to the Tweet content itself,
    /// but instead it is an indicator that the URL contained in the Tweet
    /// may contain content or media identified as sensitive content.
    pub possibly_sensitive: Option<bool>,

    /// This field only surfaces when the Tweet is a quote Tweet.
    /// This field contains the integer value Tweet ID of the quoted Tweet.
    pub quoted_status_id: Option<StatusId>,

    // pub quoted_status_id_str: Option<String>,

    /// This field only surfaces when the Tweet is a quote Tweet. This attribute
    /// contains the `Tweet` object of the original Tweet that was quoted.
    #[serde(borrow)]
    pub quoted_status: Option<Box<Tweet<'a>>>,

    /// A set of key-value pairs indicating the intended contextual delivery
    /// of the containing Tweet. Currently used by Twitter’s Promoted Products.
    pub scopes: Option<HashMap<String, JsonValue>>,

    /// Number of times this Tweet has been retweeted.
    pub retweet_count: u64,

    /// *Perspectival* Indicates whether this Tweet has been retweeted
    /// by the authenticating user.
    pub retweeted: bool,

    /// Users can amplify the broadcast of Tweets authored by other users
    /// by [retweeting][1]. Retweets can be distinguished from typical Tweets
    /// by the existence of a `retweeted_status` attribute. This attribute
    /// contains a representation of the original Tweet that was retweeted.
    ///
    /// [1]: https://dev.twitter.com/rest/reference/post/statuses/retweet/%3Aid
    ///
    /// Note that retweets of retweets do not show representations of
    /// the intermediary retweet, but only the original Tweet. (Users can also
    /// [unretweet][2] a retweet they created by deleting their retweet.)
    ///
    /// [2]: https://dev.twitter.com/rest/reference/post/statuses/destroy/%3Aid
    #[serde(borrow)]
    pub retweeted_status: Option<Box<Tweet<'a>>>,

    /// Utility used to post the Tweet, as an HTML-formatted string.
    /// Tweets from the Twitter website have a source value of `web`.
    #[serde(borrow)]
    pub source: Cow<'a, str>,

    /// The actual UTF-8 text of the status update. See [twitter-text][1]
    /// for details on what is currently considered valid characters.
    ///
    /// [1]: https://github.com/twitter/twitter-text/blob/master/rb/lib/twitter-text/regex.rb
    #[serde(borrow)]
    pub text: Cow<'a, str>,

    /// Indicates whether the value of the `text` parameter was truncated,
    /// for example, as a result of a retweet exceeding the 140 character
    /// Tweet length. Truncated text will end in ellipsis, like this `...`
    ///
    /// Since Twitter now rejects long Tweets vs truncating them,
    /// the large majority of Tweets will have this set to `false`.
    ///
    /// Note that while native retweets may have their toplevel `text` property
    /// shortened, the original text will be available under
    /// the `retweeted_status` object and the `truncated` parameter will be set
    /// to the value of the original status (in most cases, `false`).
    pub truncated: bool,

    /// The user who posted this Tweet.
    /// Perspectival attributes embedded within this object are unreliable.
    #[serde(borrow)]
    pub user: User<'a>,

    /// When set to `true`, it indicates that this piece of content has been
    /// withheld due to a [DMCA complaint][1].
    ///
    /// [1]: http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act
    #[serde(default)]
    pub withheld_copyright: bool,

    /// When present, indicates a list of uppercase
    /// [two-letter country codes][1] this content is withheld from.
    /// Twitter supports the following non-country values for this field:
    ///
    /// [1]: http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2
    ///
    /// - `XX` - Content is withheld in all countries
    /// - `XY` - Content is withheld due to a DMCA request.
    #[serde(borrow)]
    #[serde(default)]
    pub withheld_in_countries: Vec<Cow<'a, str>>,

    /// When present, indicates whether the content being withheld is
    /// the `Status` or a `User`.
    #[serde(borrow)]
    pub withheld_scope: Option<WithheldScope<'a>>,
}

/// ID of a Tweet.
pub type StatusId = u64;