use serde::{Deserialize, Serialize};
use super::user::User;
#[derive(Debug, Clone, Serialize)]
pub struct LoginRequest {
pub identifier: String,
pub code: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct LoginResponse {
pub token: String,
pub user: User,
}
#[derive(Debug, Clone, Serialize)]
pub struct SendCodeRequest {
#[serde(rename = "type")]
pub code_type: String,
pub target: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SendCodeResponse {
pub message: String,
#[serde(rename = "code", default)]
pub verification_code: Option<String>,
}
pub type AuthResponse = LoginResponse;
#[derive(Debug, Clone, Serialize)]
pub struct SetLinkIDRequest {
pub linkid: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct SetLinkIDResponse {
pub message: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct CheckLinkIDResponse {
pub available: bool,
pub message: Option<String>,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ApiError {
pub error: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ApiErrorResponse {
pub success: bool,
pub error: ErrorDetail,
pub meta: ResponseMeta,
}
#[derive(Debug, Clone, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ErrorDetail {
pub code: String,
pub message: String,
#[serde(default)]
pub details: serde_json::Value,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ResponseMeta {
pub request_id: String,
pub timestamp: String,
}
#[derive(Debug, Clone, Deserialize)]
pub struct ApiResponse<T> {
pub success: bool,
pub data: T,
pub meta: ResponseMeta,
}