tiktok_rust 0.0.10

A Rust library for interacting with the TikTok API, enabling direct posting of content and querying creator information.
Documentation
use serde::{Deserialize, Serialize};

use crate::error::ErrorResponse;

#[derive(Serialize, Deserialize, Debug)]
pub struct CreatorInfoResponse {
    #[serde(default)]
    pub data: CreatorData,
    pub error: ErrorResponse,
}

#[derive(Serialize, Deserialize, Debug, Default)]
pub struct CreatorData {
    #[serde(default)]
    pub creator_avatar_url: String,
    #[serde(default)]
    pub creator_username: String,
    #[serde(default)]
    pub creator_nickname: String,
    #[serde(default)]
    pub privacy_level_options: Vec<String>,
    #[serde(default)]
    pub comment_disabled: bool,
    #[serde(default)]
    pub duet_disabled: bool,
    #[serde(default)]
    pub stitch_disabled: bool,
    #[serde(default)]
    pub max_video_post_duration_sec: u32,
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_deserialize_with_empty_data() {
        let json_data = r#"{"data":{},"error":{"code":"access_token_invalid","message":"The access token is invalid or not found in the request.","log_id":"20240829190020EBE0D84CCEA6DE000CB6"}}"#;
        let response: CreatorInfoResponse = serde_json::from_str(json_data).unwrap();
        assert_eq!(response.data.creator_avatar_url, "");
        assert_eq!(response.data.creator_username, "");
        assert_eq!(response.data.creator_nickname, "");
        assert!(response.data.privacy_level_options.is_empty());
        assert!(!response.data.comment_disabled);
        assert!(!response.data.duet_disabled);
        assert!(!response.data.stitch_disabled);
        assert_eq!(response.data.max_video_post_duration_sec, 0);
        assert_eq!(response.error.code, "access_token_invalid");
    }

    #[test]
    fn test_deserialize_with_data() {
        let json_data = r#"{"data":{"creator_avatar_url":"http://example.com/avatar.jpg","creator_username":"user123","creator_nickname":"User","privacy_level_options":["option1", "option2"],"comment_disabled":false,"duet_disabled":true,"stitch_disabled":false,"max_video_post_duration_sec":60},"error":{"code":"none","message":"No error","log_id":"20240829190020EBE0D84CCEA6DE000CB6"}}"#;
        let response: CreatorInfoResponse = serde_json::from_str(json_data).unwrap();
        assert_eq!(
            response.data.creator_avatar_url,
            "http://example.com/avatar.jpg"
        );
        assert_eq!(response.data.creator_username, "user123");
        assert_eq!(response.data.creator_nickname, "User");
        assert_eq!(
            response.data.privacy_level_options,
            vec!["option1", "option2"]
        );
        assert_eq!(response.data.comment_disabled, false);
        assert_eq!(response.data.duet_disabled, true);
        assert_eq!(response.data.stitch_disabled, false);
        assert_eq!(response.data.max_video_post_duration_sec, 60);
        assert_eq!(response.error.code, "none");
    }
}