TweetObject

Struct TweetObject 

Source
pub struct TweetObject {
    pub tweet: Tweet,
}
Expand description

§Example

use chrono::{DateTime, NaiveDateTime, Utc};

use twitter_archive::convert::{created_at, date_time_iso_8601};

use twitter_archive::structs::tweets::TweetObject;

let editable_until_string = "2023-08-12T17:10:37.000Z";
let editable_until_native_time = NaiveDateTime::parse_from_str(&editable_until_string, date_time_iso_8601::FORMAT).unwrap();
let editable_until_date_time = DateTime::<Utc>::from_naive_utc_and_offset(editable_until_native_time, Utc);

let created_at_string = "Sat Aug 12 16:10:37 +0000 2023";
let created_at_date_time: DateTime<Utc> = DateTime::parse_from_str(&created_at_string, created_at::FORMAT)
    .unwrap()
    .into();

let json = format!(r#"{{
  "tweet": {{
    "edit_info": {{
      "initial": {{
        "editTweetIds": [
          "1690395372546301952"
        ],
        "editableUntil": "{editable_until_string}",
        "editsRemaining": "5",
        "isEditEligible": true
      }}
    }},
    "retweeted": false,
    "source": "<a href=\"https://mobile.twitter.com\" rel=\"nofollow\">Twitter Web App</a>",
    "entities": {{
      "hashtags": [],
      "symbols": [],
      "user_mentions": [
        {{
          "name": "ThePrimeagen",
          "screen_name": "ThePrimeagen",
          "indices": [
            "0",
            "13"
          ],
          "id_str": "291797158",
          "id": "291797158"
        }}
      ],
      "urls": [
        {{
          "url": "https://t.co/4LBPKIGBzf",
          "expanded_url": "https://www.youtube.com/watch?v=J7bX5dPUw0g",
          "display_url": "youtube.com/watch?v=J7bX5d…",
          "indices": [
            "132",
            "155"
          ]
        }}
      ]
    }},
    "display_text_range": [
      "0",
      "276"
    ],
    "favorite_count": "0",
    "id_str": "1690395372546301952",
    "in_reply_to_user_id": "291797158",
    "truncated": false,
    "retweet_count": "0",
    "id": "1690395372546301952",
    "possibly_sensitive": false,
    "created_at": "{created_at_string}",
    "favorited": false,
    "full_text": "@ThePrimeagen to answer your question about when writing interfaces, without the intention to change or test, is a good idea from;\n\nhttps://t.co/4LBPKIGBzf\n\n... Solidity interfaces are cheaper to store (S3), and pass over-the-wire, than shipping full contract(s) to consumers.",
    "lang": "en",
    "in_reply_to_screen_name": "ThePrimeagen",
    "in_reply_to_user_id_str": "291797158"
  }}
}}"#);

let data: TweetObject = serde_json::from_str(&json).unwrap();

// De-serialized properties
assert_eq!(data.tweet.retweeted, false);
assert_eq!(data.tweet.source, "<a href=\"https://mobile.twitter.com\" rel=\"nofollow\">Twitter Web App</a>");
assert_eq!(data.tweet.display_text_range, [0, 276]);
assert_eq!(data.tweet.favorite_count, 0);
assert_eq!(data.tweet.id_str, "1690395372546301952");
assert_eq!(data.tweet.in_reply_to_user_id, Some("291797158".to_string()));
assert_eq!(data.tweet.truncated, false);
assert_eq!(data.tweet.retweet_count, 0);
assert_eq!(data.tweet.id, "1690395372546301952");
assert_eq!(data.tweet.possibly_sensitive, Some(false));
assert_eq!(data.tweet.created_at, created_at_date_time);
assert_eq!(data.tweet.favorited, false);
assert_eq!(data.tweet.full_text, "@ThePrimeagen to answer your question about when writing interfaces, without the intention to change or test, is a good idea from;\n\nhttps://t.co/4LBPKIGBzf\n\n... Solidity interfaces are cheaper to store (S3), and pass over-the-wire, than shipping full contract(s) to consumers.");
assert_eq!(data.tweet.lang, "en");
assert_eq!(data.tweet.in_reply_to_screen_name, Some("ThePrimeagen".to_string()));
assert_eq!(data.tweet.in_reply_to_user_id_str, Some("291797158".to_string()));

// Re-serialize is equivalent to original data
assert_eq!(serde_json::to_string_pretty(&data).unwrap(), json);

Fields§

§tweet: Tweet

Why they wrapped a list of Tweets within unnecessary object label is anyone’s guess

§Example JSON data

{
  "tweet": {
    "edit_info": {
      "initial": {
        "editTweetIds": ["1690395372546301952"],
        "editableUntil": "2023-08-12T17:10:37.000Z",
        "editsRemaining": "5",
        "isEditEligible": true
      }
    },
    "retweeted": false,
    "source": "<a href=\"https://mobile.twitter.com\" rel=\"nofollow\">Twitter Web App</a>",
    "entities": {
      "hashtags": [],
      "symbols": [],
      "user_mentions": [
        {
          "name": "ThePrimeagen",
          "screen_name": "ThePrimeagen",
          "indices": ["0", "13"],
          "id_str": "291797158",
          "id": "291797158"
        }
      ],
      "urls": [
        {
          "url": "https://t.co/4LBPKIGBzf",
          "expanded_url": "https://www.youtube.com/watch?v=J7bX5dPUw0g",
          "display_url": "youtube.com/watch?v=J7bX5d…",
          "indices": ["132", "155"]
        }
      ]
    },
    "display_text_range": ["0", "276"],
    "favorite_count": "0",
    "id_str": "1690395372546301952",
    "in_reply_to_user_id": "291797158",
    "truncated": false,
    "retweet_count": "0",
    "id": "1690395372546301952",
    "possibly_sensitive": false,
    "created_at": "Sat Aug 12 16:10:37 +0000 2023",
    "favorited": false,
    "full_text": "@ThePrimeagen to answer your question about when writing interfaces, without the intention to change or test, is a good idea from;\n\nhttps://t.co/4LBPKIGBzf\n\n... Solidity interfaces are cheaper to store (S3), and pass over-the-wire, than shipping full contract(s) to consumers.",
    "lang": "en",
    "in_reply_to_screen_name": "ThePrimeagen",
    "in_reply_to_user_id_str": "291797158"
  }
}

Trait Implementations§

Source§

impl Clone for TweetObject

Source§

fn clone(&self) -> TweetObject

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for TweetObject

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<'de> Deserialize<'de> for TweetObject

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for TweetObject

Source§

fn fmt(&self, _derive_more_display_formatter: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Serialize for TweetObject

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,