#udt #macro-derive #default #default-value #rows #defined #improved

scylla-macros-flex

这个scylla-macros的分支提供了在读取行和UDT时改进兼容性的替代解析器

14个稳定版本

1.5.4 2023年12月30日
1.5.3 2023年10月7日
1.5.2 2023年4月30日
1.1.0 2022年6月17日
1.0.0 2022年4月23日

671数据库接口 中排名

Download history 49/week @ 2024-03-14 4/week @ 2024-03-28 1/week @ 2024-04-04

每月下载量154次

MIT/Apache

27KB
431 代码行

scylla-macros-flex

这个crate定义了两个derive宏

  • FromRowFlex

    • 任何NULL值都将转换为默认值(选项的默认值为none,如果其中一个字段没有实现默认,则不要使用此derive宏)。
  • FromUserTypeFlex

    • 结构体中未定义的字段将被忽略,而不会抛出错误。警告:如果使用此部分UDT覆盖udt,可能会导致数据丢失。
    • 任何NULL值都将转换为默认值(选项的默认值为none,如果其中一个字段没有实现默认,则不要使用此derive宏)。

支持serde_json

允许您使用与serde_json序列化的任意结构体,在Scylla/Cassandra中以文本形式存储。

它们的行为与UDT大致相同。

需要"serde_json"功能。

derive宏

- FromJson
- IntoJson

优点

- Way more flexible than CQL **FROZEN** UDTs thanks to Rust enums
- Schema can be changed a lot without any issue.

缺点

- Can take more space than UDT
- Can be slower than UDTs

支持rmp-serde

允许您使用与MessagePack序列化的任意结构体,在Scylla/Cassandra中以Blob形式存储。

它们的行为与UDT大致相同。

需要"rmp-serde"功能。

derive宏

- FromMessagePack
- IntoMessagePack

优点

- Way more flexible than CQL **FROZEN** UDTs thanks to Rust enums
- Schema can be changed a lot without any issue.
- Most of the time uses less space than UDT

缺点

- Can be slower than UDTs

快速支持

允许您使用与speedy序列化的任意结构体,在Scylla/Cassandra中以Blob形式存储。

仅在您不会稍后更改模式的情况下使用此功能。它们的行为与UDT大致相同。

需要"speedy"功能。

derive宏

- FromSpeedy
- IntoSpeedy

优点

- Way more flexible than CQL **FROZEN** UDTs thanks to Rust enums
- Less storage required than UDTs because udt include fields names & udt names
- Faster than UDT (because speedy is quite fast)

缺点

- You can't update a field in an atomic manner (like frozen UDTs)
- Changing your schema (eg. adding a field to a struct inside a Vec) will break everything.

依赖关系

~1.5MB
~35K SLoC