/**
 * Public API surface of the ArkTS protobuf runtime
 *
 * Version 2.0 - Visitor 模式核心架构
 *
 * 核心模块:
 * - Message: 所有消息的抽象基类
 * - Visitor: 字段访问者接口(Visitor 模式)
 * - BinaryEncodingVisitor: 二进制编码 Visitor
 * - JsonEncodingVisitor: JSON 编码 Visitor
 * - UnknownFields: 未知字段存储(兼容性)
 *
 * 工具模块:
 * - MessageRegistry: 消息类型注册表(可选)
 * - MessageUtils: 消息工具函数
 *
 * 底层模块:
 * - Writer/Reader: 二进制读写器
 * - util: 工具函数(base64, zigzag 等)
 * - RpcTransport: RPC 传输接口
 */

// ========== 核心模块 ==========

/**
 * Message 基类和相关类型
 *
 * 所有生成的消息类都继承自 Message
 */
export { Message, MessageConstructor } from './Message'

/**
 * Visitor 接口
 *
 * 用于实现 Visitor 模式,遍历消息字段
 */
export { Visitor } from './Visitor'

/**
 * 未知字段存储
 *
 * 用于保存未知字段,提升前后兼容性
 */
export { UnknownFields } from './UnknownFields'

/**
 * Binary 编码 Visitor
 *
 * 将消息编码为 Protobuf wire format
 */
export { BinaryEncodingVisitor } from './BinaryEncodingVisitor'

/**
 * JSON 编码 Visitor
 *
 * 将消息编码为 Protobuf JSON mapping
 */
export { JsonEncodingVisitor } from './JsonEncodingVisitor'

// ========== 工具模块 ==========

/**
 * 消息类型注册表(可选)
 *
 * ⚠️ 普通场景无需使用,只在以下场景需要:
 * - 使用 google.protobuf.Any 类型
 * - 需要根据类型名动态创建消息
 */
export { MessageRegistry } from './MessageRegistry'

/**
 * 消息工具函数
 *
 * 提供批量操作、过滤、分组等实用功能
 */
export { MessageUtils } from './MessageUtils'

// ========== 底层模块 ==========

/**
 * 二进制写入器
 *
 * 用于编码 Protobuf wire format
 */
export { Writer } from './Writer'

/**
 * 二进制读取器
 *
 * 用于解码 Protobuf wire format
 */
export { Reader } from './Reader'

/**
 * 工具函数集合
 *
 * 包含 base64、zigzag、WKT JSON 转换等
 */
export {
  encodeUTF8,
  decodeUTF8,
  encodeBase64,
  decodeBase64,
  zigZag32,
  unZigZag32,
  zigZag64,
  unZigZag64,
  timestampToJson,
  timestampFromJson,
  durationToJson,
  durationFromJson,
  TimestampParts,
  DurationParts
} from './util'

/**
 * RPC 传输接口
 *
 * 用于 gRPC 客户端实现
 */
export { RpcTransport } from './RpcTransport'