//! 验证错误示例
//!
//! 展示如何使用 FieldError 和 validation_errors 处理表单验证

use anycms_core::{ApiResult, FieldError};

fn main() {
    println!("=== Validation Errors Demo ===\n");

    // 1. 使用 validation_errors 快捷方法
    println!("1. validation_errors():");
    let result: ApiResult<()> = ApiResult::validation_errors(vec![
        FieldError::new("email", "邮箱格式不正确"),
        FieldError::new("name", "用户名不能为空"),
        FieldError::new("age", "年龄必须大于 18"),
    ]);
    let json = serde_json::to_string_pretty(&result).unwrap();
    println!("{}\n", json);

    // 2. 链式添加错误
    println!("2. with_error() chain:");
    let result: ApiResult<()> = ApiResult::fail("提交失败")
        .with_code(422)
        .with_error("password", "密码长度至少 8 位")
        .with_error("password", "必须包含数字");
    let json = serde_json::to_string_pretty(&result).unwrap();
    println!("{}\n", json);

    // 3. FieldError 序列化格式
    println!("3. Single FieldError:");
    let err = FieldError::new("username", "已被占用");
    let json = serde_json::to_string_pretty(&err).unwrap();
    println!("{}\n", json);

    // 4. 成功响应不包含 errors 字段
    println!("4. Success response (no errors field):");
    let result: ApiResult<String> = ApiResult::value("ok".to_string());
    let json = serde_json::to_string_pretty(&result).unwrap();
    println!("{}\n", json);
    assert!(
        serde_json::to_value(&result)
            .unwrap()
            .get("errors")
            .is_none()
    );
    println!("Verified: 'errors' field absent in success response");
}
