Documentation
use serde::{Deserialize, Serialize};
use serde_json::{Map, Value};

use crate::objects::v2::Error;

//
#[derive(Deserialize, Serialize, Debug, Clone)]
pub struct ResponseErrorBody {
    #[serde(default)]
    pub data: Map<String, Value>,
    pub error: Error,
}

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

    use crate::objects::v2::ErrorCode;

    #[test]
    fn test_de() {
        match serde_json::from_str::<ResponseErrorBody>(include_str!(
            "../../../tests/response_body_files/v2/user_info__err__access_token_invalid.json"
        )) {
            Ok(err_json) => {
                assert_eq!(err_json.error.code, ErrorCode::AccessTokenInvalid);
            }
            x => panic!("{x:?}"),
        }

        match serde_json::from_str::<ResponseErrorBody>(include_str!(
            "../../../tests/response_body_files/v2/video_upload_init__err__spam_risk_too_many_pending_share.json"
        )) {
            Ok(err_json) => {
                assert_eq!(err_json.error.code, ErrorCode::Other("spam_risk_too_many_pending_share".into()));
            }
            x => panic!("{x:?}"),
        }
    }
}