#signed-integer #graphql #javascript #interop #abstraction #primitive #created

i54_

一个 54 位有符号整数抽象。创建用于更轻松地与 GraphQL 和 JavaScript 进行互操作。

3 个版本 (破坏性更新)

0.2.0 2021 年 5 月 23 日
0.1.0 2021 年 2 月 6 日
0.0.1 2021 年 1 月 11 日

#716HTTP 服务器

每月 22 次下载
用于 turbo_server

MIT OR Apache-2.0 OR CC0-1.0

9KB
171 代码行

i54_ Crates.io

为 Rust 创建的 54 位有符号整数抽象。创建用于更轻松地与 GraphQL 和 JavaScript 进行互操作,后者没有适当的 i64 兼容的原始类型。

前提

JavaScript 和 GraphQL 都以原生方式表示大型(超过 32 位)整数作为双精度浮点值,并且没有表示大整数的原始类型。

当在 Rust 中表示大于 u32 的整数时,同时保持与 JavaScript 和 GraphQL 的类型互操作性,这会带来问题。

为了使程序员意图明确,我们提供了一个 i54 类型,该类型理想上应类似于 Rust 原始类型,并旨在表示适合于假设的 54 位有符号整数原始类型的值。

i54 表示可以由一个 IEEE 754 双精度浮点表示 精确编码的最大有符号整数。 (大约编码为尾数 52 位,指数位派生的 1 位和 1 位符号位。)

令人兴奋的特性实现

  • serde - Serialize, Deserialize
  • rusqlite (可选) - FromSql, ToSql
  • juniper (可选) - GraphQLScalar

用法

[dependencies]
i54_ = {version = "0.2", features = ["rusqlite", "juniper"]}
use i54_::i54;

fn main() {
    let mut x: i54 = 1.into();
    x += 1.into();
    assert!(x == 2);
}

许可证:MIT OR Apache-2.0 OR CC0-1.0 (公共领域)

依赖项

~0.5–5.5MB
~119K SLoC