5个版本
使用旧的Rust 2015
0.1.4 | 2017年9月8日 |
---|---|
0.1.3 | 2017年9月8日 |
0.1.2 | 2017年9月8日 |
0.1.1 | 2017年9月8日 |
0.1.0 | 2017年9月8日 |
#23 in #listener
用于 rapt_derive
29KB
259 行
Rapt
构建状态(Linux) | |
项目状态 | 可用,处于alpha和beta之间 |
生产就绪性 | 取决于您的风险承受能力 |
Rapt是Rust的运行时应用程序仪器工具包。
贡献
这个项目处于初期阶段,我们始终欢迎贡献者。
我们的目标是鼓励无障碍的贡献到项目中。为了实现这一点,我们使用Unprotocols C4流程。请阅读它,它将回答许多问题。我们的目标是尽快合并拉取请求并定期发布新稳定版本。
简而言之,这意味着
- 我们快速合并拉取请求(try!)
- 我们欢迎各种想法
- 我们更倾向于先有代码,后有共识
要了解更多信息,请阅读我们的 贡献指南
lib.rs
:
Rapt
运行时应用程序仪器工具包
Rapt为Rust库和应用程序提供了一种标准接口,以提供运行时内省功能。
此库有几个关键组件
仪器
Instrument
是一个Serde序列化值的线程安全包装器。它是基于 Listener
仪器是可克隆的,并且可以安全地使用 Instrument#update
更新包装的值。
仪器板
仪器板是将多个 仪器 聚合到单个结构中并为其实现或推导 Instruments
的概念。请注意,如果使用推导(使用 rapt_derive
包),最后一个类型参数 必须 绑定到 Listener
extern crate rapt;
extern crate serde;
#[macro_use]
extern crate rapt_derive;
use serde::Serialize;
use rapt::{Listener, Instrument};
#[allow(dead_code)]
#[derive(Instruments)]
struct AppInstruments<T : Serialize, L: Listener> {
value: Instrument<T, L>,
}
pub fn main() {}
在上面的示例中,L
必须 始终保持最后一个类型参数。
它是基于 Listener
的。
监听器
Listener
是一个允许仪器通知相关方关于更新的特质
示例
extern crate rapt;
extern crate serde;
#[macro_use]
extern crate rapt_derive;
#[macro_use]
extern crate serde_derive;
#[macro_use]
extern crate assert_matches;
use serde::Serialize;
use rapt::{Listener, Instrument};
#[derive(Debug, Clone, Copy, Serialize)]
enum Status { Stopped, Started }
#[derive(Clone, Serialize)]
struct Service {
status: Status,
}
#[derive(Instruments)]
struct AppInstruments<L: Listener> {
http_server: Instrument<Service, L>,
}
use std::thread;
use std::time::Duration;
fn main() {
let app_instruments = AppInstruments::<()> {
http_server: Instrument::new(Service { status: Status::Stopped }),
};
let http_server_svc = app_instruments.http_server.clone();
let thread_handle = thread::spawn(move || {
thread::sleep(Duration::from_millis(100));
let _ = http_server_svc.update(|v| v.status = Status::Started).unwrap();
});
thread::sleep(Duration::from_millis(200));
assert_matches!(app_instruments.http_server.read().and_then(|v| Ok(v.status)), Ok(Status::Started));
let _ = thread_handle.join().unwrap();
}
依赖关系
~0.1–1MB
~17K SLoC