pi_append_log 0.1.0

Storage-agnostic append-only block log traits, codec, layout, and file backend
Documentation
use std::path::PathBuf;

use pi_append_log::Layout;
use pi_append_log::file::DefaultFileLayout;

#[test]
// 验证默认布局使用固定八位十进制编号,并分别生成 active、closed、archive 三种状态名称。
fn default_layout_uses_eight_digit_active_closed_and_archive_names() {
    let layout = DefaultFileLayout::new(PathBuf::from("logs"));
    assert_eq!(
        layout.active_name(&1),
        PathBuf::from("logs/00000001.active")
    );
    assert_eq!(
        layout.closed_name(&1),
        PathBuf::from("logs/00000001.closed")
    );
    assert_eq!(
        layout.archive_name(&1),
        PathBuf::from("logs/00000001.archive")
    );
}

#[test]
// 验证布局只解析自身目录、合法八位编号和匹配状态后缀,拒绝短编号、错误状态、其他目录及零编号。
fn default_layout_parses_only_its_own_valid_names() {
    let layout = DefaultFileLayout::new(PathBuf::from("logs"));
    assert_eq!(
        layout.parse_active_name(&PathBuf::from("logs/00000001.active")),
        Some(1)
    );
    assert_eq!(
        layout.parse_closed_name(&PathBuf::from("logs/00000002.closed")),
        Some(2)
    );
    assert_eq!(
        layout.parse_archive_name(&PathBuf::from("logs/00000003.archive")),
        Some(3)
    );
    assert_eq!(
        layout.parse_active_name(&PathBuf::from("logs/1.active")),
        None
    );
    assert_eq!(
        layout.parse_active_name(&PathBuf::from("logs/00000001.closed")),
        None
    );
    assert_eq!(
        layout.parse_active_name(&PathBuf::from("other/00000001.active")),
        None
    );
    assert_eq!(
        layout.parse_active_name(&PathBuf::from("logs/00000000.active")),
        None
    );
}