Skip to main content

example_usage/
example_usage.rs

1// 示例:演示 include_zstd! 宏的使用
2//
3// 运行方式:
4//   cargo run --example example_usage        # 运行示例
5//   cargo test --example example_usage       # 运行测试
6
7fn main() {
8    // 使用 include_zstd! 宏加载文件
9    // 路径相对于此示例文件所在的目录 (examples/)
10    let asset = include_zstd::include_zstd!("sample.txt");
11
12    // 获取文件元数据
13    let metadata = asset.metadata();
14    println!("文件大小: {} 字节", metadata.len);
15    println!("是否为文件: {}", metadata.is_file);
16    println!("是否为目录: {}", metadata.is_dir);
17
18    if let Some(modified) = metadata.modified {
19        println!("修改时间: {:?}", modified);
20    }
21
22    // 获取解压后的文件内容
23    let bytes = asset.bytes();
24    println!("解压后内容长度: {} 字节", bytes.len());
25    println!(
26        "内容预览:\n{}",
27        String::from_utf8_lossy(&bytes[..bytes.len().min(200)])
28    );
29
30    // 验证缓存机制:多次调用 bytes() 返回相同的内存地址
31    let ptr1 = asset.bytes().as_ptr();
32    let ptr2 = asset.bytes().as_ptr();
33    assert_eq!(ptr1, ptr2, "缓存机制应该返回相同的指针");
34    println!("\n缓存验证通过:两次调用 bytes() 返回相同指针");
35}
36
37#[cfg(test)]
38mod tests {
39    #[test]
40    fn test_include_zstd_loads_file() {
41        let asset = include_zstd::include_zstd!("sample.txt");
42
43        // 验证元数据
44        assert!(asset.metadata().is_file);
45        assert!(!asset.metadata().is_dir);
46        assert_eq!(asset.metadata().len, 82); // sample.txt 的实际大小
47    }
48
49    #[test]
50    fn test_include_zstd_bytes_correct() {
51        let asset = include_zstd::include_zstd!("sample.txt");
52        let bytes = asset.bytes();
53
54        // 验证解压后的内容
55        let content = String::from_utf8_lossy(bytes);
56        assert!(content.contains("Hello, include-zstd!"));
57        assert!(content.contains("sample file for testing"));
58    }
59
60    #[test]
61    fn test_include_zstd_caching() {
62        let asset = include_zstd::include_zstd!("sample.txt");
63
64        // 验证缓存机制
65        let ptr1 = asset.bytes().as_ptr();
66        let ptr2 = asset.bytes().as_ptr();
67        assert_eq!(ptr1, ptr2, "多次调用 bytes() 应该返回相同指针");
68    }
69}