This article also has an English version.
本篇将介绍我在 Rust 中构建可靠的上下文传递组件的一些思考、设计与实现。我实现的 certain-map 已经开源(一年多以前开源的,近期做了更多改进,本文后续会介绍),欢迎使用!
项目地址:https://github.com/ihciah/certain-map
它解决了什么问题:
- 在跨组件传递上下文时,它可以借助编译器保证字段的存在性(即当某组件对 Context 中某字段存在读依赖时,前置组件必须写入过该字段,否则无法通过编译)
- 通用组件实现依赖的上下文可被定义为泛型参数并加以约束,这使组件实现更为通用,不耦合 Context 具体类型
注:虽然项目名字看起来是一种 map 实现,但其实这是一个基于过程宏生成的 struct。之所以命名为 certain-map 是因为其设计初衷是为了替换 TypeMap,并保证字段的存在性。