pub struct TranscriptWriter { /* private fields */ }Expand description
Appends TranscriptEntry lines to a JSONL transcript file.
The file handle is kept open for the writer’s lifetime to avoid
race conditions from repeated open/close cycles. The handle is wrapped in
Arc<Mutex<File>> so the writer can be cheaply cloned and passed to
tokio::task::spawn_blocking for non-blocking appends.
§Examples
use std::path::Path;
use zeph_subagent::transcript::TranscriptWriter;
let writer = TranscriptWriter::new(Path::new("/tmp/session.jsonl")).unwrap();
// writer.append(seq, &message) to persist each message.Implementations§
Source§impl TranscriptWriter
impl TranscriptWriter
Sourcepub fn new(path: &Path) -> Result<Self>
pub fn new(path: &Path) -> Result<Self>
Create (or open) a JSONL transcript file in append mode.
Creates parent directories if they do not already exist.
§Errors
Returns io::Error if the directory cannot be created or the file cannot be opened.
Sourcepub async fn append(&self, seq: u32, message: &Message) -> Result<()>
pub async fn append(&self, seq: u32, message: &Message) -> Result<()>
Append a single message as a JSON line and flush immediately.
Serialization is done on the caller’s thread; the blocking write and flush
are offloaded to tokio::task::spawn_blocking so the Tokio executor is not stalled.
§Errors
Returns io::Error on serialization, write failure, lock poison, or thread-pool panic.
Sourcepub fn write_meta(
dir: &Path,
agent_id: &str,
meta: &TranscriptMeta,
) -> Result<()>
pub fn write_meta( dir: &Path, agent_id: &str, meta: &TranscriptMeta, ) -> Result<()>
Write the meta sidecar file for an agent.
§Errors
Returns io::Error on serialization or write failure.
Sourcepub async fn write_meta_async(
dir: &Path,
agent_id: &str,
meta: &TranscriptMeta,
) -> Result<()>
pub async fn write_meta_async( dir: &Path, agent_id: &str, meta: &TranscriptMeta, ) -> Result<()>
Async variant of write_meta that offloads the blocking FS write
to a spawn_blocking thread so the Tokio executor is not stalled.
§Errors
Returns io::Error on serialization, write failure, or thread-pool panic.
Trait Implementations§
Source§impl Clone for TranscriptWriter
impl Clone for TranscriptWriter
Source§fn clone(&self) -> TranscriptWriter
fn clone(&self) -> TranscriptWriter
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreAuto Trait Implementations§
impl Freeze for TranscriptWriter
impl RefUnwindSafe for TranscriptWriter
impl Send for TranscriptWriter
impl Sync for TranscriptWriter
impl Unpin for TranscriptWriter
impl UnsafeUnpin for TranscriptWriter
impl UnwindSafe for TranscriptWriter
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
Source§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request