use serde::Deserialize;
#[derive(Debug, Clone, Deserialize)]
pub struct TweetResponse {
pub data: TweetData,
}
#[derive(Debug, Clone, Deserialize)]
pub struct TweetData {
pub id: String,
pub text: String,
#[serde(default)]
pub edit_history_tweet_ids: Option<Vec<String>>,
}
impl TweetResponse {
pub fn tweet_url(&self, username: &str) -> String {
format!("https://twitter.com/{}/status/{}", username, self.data.id)
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_deserialize_tweet_response() {
let json = r#"
{
"data": {
"id": "1234567890",
"text": "Hello, world!"
}
}
"#;
let response: TweetResponse = serde_json::from_str(json).unwrap();
assert_eq!(response.data.id, "1234567890");
assert_eq!(response.data.text, "Hello, world!");
assert!(response.data.edit_history_tweet_ids.is_none());
}
#[test]
fn test_tweet_url() {
let response = TweetResponse {
data: TweetData {
id: "1234567890".to_string(),
text: "Test".to_string(),
edit_history_tweet_ids: None,
},
};
let url = response.tweet_url("testuser");
assert_eq!(url, "https://twitter.com/testuser/status/1234567890");
}
}