data_hook 0.1.0

A lightweight data collection facade
Documentation
# Data Hook

一个轻量级的数据收集门面库,类似于 `log` crate 的设计理念。

`data_hook` crate 提供了一个简单的数据收集 API,它抽象了实际的数据处理实现。库可以使用此 crate 提供的数据收集 API,而使用者可以选择最适合其用例的收集器实现。

如果没有选择收集器实现,门面会回退到"无操作"实现,忽略所有数据收集请求。在这种情况下,开销非常小——只是一个整数加载、比较和跳转。

## 特性

- **简单易用**:只需一个 `data_hook!` 宏即可收集数据
- **零依赖**:核心库没有外部依赖
- **高性能**:未设置收集器时开销极小
- **可插拔**:通过 `Collect` trait 支持自定义收集器
- **类型安全**:编译时保证类型安全

## 基本用法

### 1. 在库中使用 data_hook

```rust
use data_hook::data_hook;

fn some_function() {
    data_hook!("user_action", "用户点击了按钮");
    data_hook!("performance", "请求耗时 {} ms", 150);
    
    let user_id = 12345;
    data_hook!("user_action", "用户 {} 登录", user_id);
}
```

### 2. 实现自定义收集器

```rust
use data_hook::{Collect, Record};

struct MyCollector;

impl Collect for MyCollector {
    fn collect(&self, record: &Record) {
        println!("[{}] {}", record.category, record.data);
    }
    
    fn flush(&self) {
        // 可选:刷新缓冲的数据
    }
}
```

### 3. 设置全局收集器

```rust
use data_hook::set_collector;

fn main() {
    static COLLECTOR: MyCollector = MyCollector;
    set_collector(&COLLECTOR);
    
    // 现在所有的 data_hook! 调用都会使用 MyCollector
}
```

## 示例

### 简单的打印收集器

运行简单示例:

```bash
cargo run --example simple
```

这个示例展示了如何创建一个简单的收集器,将数据打印到标准输出。

### 文件收集器

运行文件收集器示例:

```bash
cargo run --example file_collector
```

这个示例展示了如何实现一个文件收集器,将不同类别的数据写入不同的 JSON Lines 文件。

## API 文档

### `data_hook!`

主要的数据收集宏。

```rust
data_hook!(category, format_string, args...)
```

- `category`: 数据类别,用于标识数据类型
- `format_string`: 格式化字符串,类似 `println!`
- `args...`: 格式化参数

### `Record` 结构体

```rust
pub struct Record {
    pub category: String,  // 数据类别
    pub data: String,      // 数据内容
}
```

### `Collect` Trait

```rust
pub trait Collect: Send + Sync {
    fn collect(&self, record: &Record);
    fn flush(&self) {} // 可选实现
}
```

### `set_collector` 函数

```rust
pub fn set_collector(collector: &'static dyn Collect)
```

设置全局数据收集器。应该在程序开始时调用一次。


## 许可证

本项目采用 MIT 或 Apache-2.0 双重许可证。