pi_append_log 0.3.0

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

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

#[test]
fn default_layout_uses_segment_and_archive_names() {
    let layout = DefaultFileLayout::new(PathBuf::from("logs"));
    assert_eq!(layout.segment_name(&1), PathBuf::from("logs/00000001"));
    assert_eq!(
        layout.archive_name(&1),
        PathBuf::from("logs/00000001.archive")
    );
}

#[test]
fn default_layout_parses_only_valid_segment_and_archive_names() {
    let layout = DefaultFileLayout::new(PathBuf::from("logs"));
    assert_eq!(
        layout.parse_segment_name(&PathBuf::from("logs/00000001")),
        Some(1)
    );
    assert_eq!(
        layout.parse_archive_name(&PathBuf::from("logs/00000001.archive")),
        Some(1)
    );
    assert_eq!(
        layout.parse_segment_name(&PathBuf::from("logs/00000001.archive")),
        None
    );
    assert_eq!(layout.parse_segment_name(&PathBuf::from("logs/1")), None);
    assert_eq!(
        layout.parse_segment_name(&PathBuf::from("other/00000001")),
        None
    );
    assert_eq!(
        layout.parse_segment_name(&PathBuf::from("logs/00000000")),
        None
    );
}