Awesome
Metainfo
Transmissing metainfo across components.
Quickstart
Metainfo is designed to be passed through task local, so we provided a unified key for it metainfo::METAINFO
, and we recommend you to use it this way:
METAINFO.scope(...)
MetaInfo
is used to passthrough information between components and even client-server.
It supports two types of info: typed map and string k-v.
It is designed to be tree-like, which means you can share a MetaInfo
with multiple children.
Note: only the current scope is mutable.
Example:
use metainfo::MetaInfo;
fn test() {
let mut m1 = MetaInfo::new();
m1.insert::<i8>(2);
assert_eq!(*m1.get::<i8>().unwrap(), 2);
let (mut m1, mut m2) = m1.derive();
assert_eq!(*m2.get::<i8>().unwrap(), 2);
m2.insert::<i8>(4);
assert_eq!(*m2.get::<i8>().unwrap(), 4);
m2.remove::<i8>();
assert_eq!(*m2.get::<i8>().unwrap(), 2);
}
Related Projects
- Volo: A high-performance and strong-extensibility Rust RPC framework that helps developers build microservices.
- Volo-rs: The volo ecosystem which contains a lot of useful components.
- Motore: Middleware abstraction layer powered by GAT.
- Pilota: A thrift and protobuf implementation in pure rust with high performance and extensibility.
Contributing
See CONTRIBUTING.md for more information.
License
Metainfo is dual-licensed under the MIT license and the Apache License (Version 2.0).
See LICENSE-MIT and LICENSE-APACHE for details.
Community
-
Email: volo@cloudwego.io
-
How to become a member: COMMUNITY MEMBERSHIP
-
Issues: Issues
-
Feishu: Scan the QR code below with Feishu or click this link to join our CloudWeGo Volo user group.
<img src="https://github.com/cloudwego/metainfo/raw/main/.github/assets/volo-feishu-user-group.png" alt="Volo user group" width="50%" height="50%" />