- Type/Function/Variantを Segment* 系へ統一 - SessionId/SessionStart/SessionOrigin/SessionStartState/SessionState/SessionLogSink/SessionLockInfo - new_session_id / session_id / create_session* / list_sessions / lookup_session / update_session / find_by_session - protocol Event::SessionRotated → SegmentRotated、CompactDone.new_session_id → new_segment_id - Module: session_log → segment_log / session → segment (file mv 含む) pod 側の session_log_sink → segment_log_sink も同様 - crate 名 (session-store)、CLI flag (--session)、ResumeWithSession (CLI tied) は据え置き - session-tests/session_metrics_test 等の Store impl も追従
61 lines
1.7 KiB
Rust
61 lines
1.7 KiB
Rust
//! Common frontmatter helpers and shared types.
|
|
|
|
use serde::{Deserialize, Serialize};
|
|
|
|
use crate::error::LintError;
|
|
|
|
pub use lint_common::Frontmatter;
|
|
|
|
/// Reference to a session-store entry range. Stored in `sources` /
|
|
/// `last_sources` arrays for traceability back to raw session logs.
|
|
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
|
|
pub struct SourceRef {
|
|
pub segment_id: String,
|
|
/// `[start_entry, end_entry]` inclusive range of session-store entry indices.
|
|
pub range: [u64; 2],
|
|
}
|
|
|
|
/// Split a markdown document into `(yaml_frontmatter, body)`.
|
|
pub fn split_frontmatter(content: &str) -> Result<(&str, &str), LintError> {
|
|
lint_common::split_frontmatter(content).map_err(Into::into)
|
|
}
|
|
|
|
#[cfg(test)]
|
|
mod tests {
|
|
use super::*;
|
|
use lint_common::RecordLintError;
|
|
|
|
#[test]
|
|
fn splits_simple() {
|
|
let doc = "---\nfoo: 1\n---\nbody here\n";
|
|
let (y, b) = split_frontmatter(doc).unwrap();
|
|
assert_eq!(y, "foo: 1\n");
|
|
assert_eq!(b, "body here\n");
|
|
}
|
|
|
|
#[test]
|
|
fn no_leading_delim_errors() {
|
|
let err = split_frontmatter("hello").unwrap_err();
|
|
assert!(matches!(
|
|
err,
|
|
LintError::Record(RecordLintError::MissingFrontmatter)
|
|
));
|
|
}
|
|
|
|
#[test]
|
|
fn no_closing_delim_errors() {
|
|
let err = split_frontmatter("---\nfoo: 1\nno close\n").unwrap_err();
|
|
assert!(matches!(
|
|
err,
|
|
LintError::Record(RecordLintError::MalformedFrontmatter(_))
|
|
));
|
|
}
|
|
|
|
#[test]
|
|
fn handles_empty_body() {
|
|
let doc = "---\nfoo: 1\n---\n";
|
|
let (_, b) = split_frontmatter(doc).unwrap();
|
|
assert_eq!(b, "");
|
|
}
|
|
}
|