Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

二进制协议

类型映射

Rust 类型TS/JS 类型Kotlin 类型
i8 ~ i64, u8 ~ u64, f32, f64numberInt/Long/Float/Double
boolbooleanBoolean
String, &strstringString
Vec<u8>Uint8ArrayByteArray
Option<T>T | nullT?
Vec<T>T[]List<T>
struct{ field: Type }data class
enum{ tag: 'Variant', data: ... }sealed class

错误码

系统保留错误码范围为 -90011-90000。用户自定义错误不得使用此范围。

常量描述
CODE_SIGNAL-90000操作系统信号(如 Ctrl+C)
CODE_MSG_TOO_SHORT-90001消息过短
CODE_PAYLOAD_MISMATCH-90002负载长度不匹配
CODE_SERIALIZE-90003序列化/反序列化错误
CODE_STATE_NOT_FOUND-90004State 类型未注册
CODE_HANDLER-90005Handler 执行错误
CODE_INVALID_PARAM-90006无效参数
CODE_IO-90007I/O 错误
CODE_WS-90008WebSocket 错误
CODE_HTTP-90009HTTP 错误
CODE_TCP-90010TCP 错误
CODE_LONG_CONNECTION_NOT_SUPPORTED-90011HTTP 模式不支持长连接
CODE_RATE_LIMITED-90012超出速率限制
#![allow(unused)]
fn main() {
// 自定义错误(错误码必须在保留范围之外)
return Err(afast::Error::custom(400, "invalid request parameter"));
}

自定义错误类型

实现 AFastError trait 即可定义自己的错误类型,handler 直接返回 Result<T, MyError>

#![allow(unused)]
fn main() {
use afast::AFastError;

enum MyError {
    NotFound(String),
    Unauthorized,
}

impl AFastError for MyError {
    fn code(&self) -> i64 {
        match self {
            MyError::NotFound(_) => 404,
            MyError::Unauthorized => 401,
        }
    }

    fn message(&self) -> String {
        match self {
            MyError::NotFound(name) => format!("{} not found", name),
            MyError::Unauthorized => "unauthorized".into(),
        }
    }
}

#[handler(desc("Get user"))]
async fn get_user(id: Data<UserId>) -> afast::Result<UserInfo, MyError> {
    find_user(id).ok_or(MyError::NotFound("user".into()))
}
}

所有 handler 宏(#[handler]#[get]/#[post]/#[put]/#[delete]#[ws]#[sse])均支持自定义错误类型。afast::Result<T> 默认使用 Error,完全向后兼容。

已复制到剪贴板!