1个不稳定版本

0.74.3 2024年6月11日
0.1.0 2024年6月11日

#464 in HTTP服务器


2 个Crates中使用 (via graphql-federated-graph)

Apache-2.0

12KB
238

包装被压缩成u32以实现Copy。它在多个地方被复制以跟踪当前的包装。它功能上等同于

struct Wrapping {
  inner_is_required: bool,
  /// Innermost to outermost.
  list_wrappings: VecDeque<ListWrapping>
}

由于ListWrapping只有两种情况,并且我们不会遇到荒谬的包装级别,因此我们可以进行位打包。当前结构支持多达21个list_wrappings。

其结构如下

       start (5 bits)
       ↓               ↓ list_wrapping (1 == Required / 0 == Nullable)
   ┌────┐      ┌────────────────────────┐
  0000_0000_0000_0000_0000_0000_0000_0000
         └────┘
            ↑ end (5 bits)
  ↑
  inner_is_required flag (1 == required)

list_wrapping是从内部到外部存储的,使用起始和结束作为list_wrapping位内的位置。像简化的固定容量VecDeque一样操作。为了简化位移操作,list_wrapping是从右到左存储的。

依赖项

~0.4–1MB
~23K SLoC