Result 与错误
头文件:<dlt698/common/result.hpp>,命名空间 dlt698。
Result
Result<T> 是 [[nodiscard]] 的,成功值或错误二选一。
用法:
先判断再取值
value() 和 error() 在状态不匹配时分别抛 std::bad_variant_access。必须先判断 operator bool() 或使用 if (result)。
value() 有三个重载,分别对应左值、const 左值和右值对象。在临时 Result 上直接调用 value() 会得到右值引用,可以把它移动走。
Result
无返回值的操作使用 Result<void>,默认构造表示成功。
channel->close()、session->async_release() 一类操作的结果就是这样:判断 operator bool() 即可,成功时没有值可取。
Error
context 保存字段名(如 "attribute"、"output limit")或传输层描述(如 "connect"),便于直接写日志。
remote_code 用于保存远端协议原码,不做转换:ERROR-Response 的 type、GET 的逐项 DAR、CONNECT 的拒绝结果都放在这里。
ErrorCode
完整列表见错误码参考。
业务成功不能只看外层 Result
这是接入时最容易出错的一点:
- CONNECT 被拒绝不算传输失败。
Result<ConnectResponse>可能是成功的,但response.result非零。 - GET 部分成功不算失败。
Result<GetResponse>成功,但每个AttributeResult::result可能是 DAR。 - SET/ACTION 逐项结果同理,
SetResult::dar、ActionResult::dar才是业务结论。