#[non_exhaustive]pub enum SessionEntry {
Message(LlmMessage),
ModelChange {
from: ModelSpec,
to: ModelSpec,
timestamp: u64,
},
ThinkingLevelChange {
from: String,
to: String,
timestamp: u64,
},
Compaction {
dropped_count: usize,
tokens_before: usize,
tokens_after: usize,
timestamp: u64,
},
Label {
text: String,
message_index: usize,
timestamp: u64,
},
Custom {
type_name: String,
data: Value,
timestamp: u64,
},
}Expand description
A single entry in a persisted session.
Serialized with an adjacently-tagged representation: {"entry_type": "...", "data": {...}}.
Old-format lines (raw LlmMessage without entry_type) are deserialized as
SessionEntry::Message via a custom fallback in SessionEntry::parse.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Message(LlmMessage)
An LLM message (user, assistant, tool result). The only variant sent to the LLM.
ModelChange
Records a model switch during the session.
ThinkingLevelChange
Records a thinking level change.
Compaction
Records a context compaction event.
Label
A user bookmark/annotation on a specific message.
Custom
Arbitrary structured data for extensibility.
Implementations§
Source§impl SessionEntry
impl SessionEntry
Sourcepub fn parse(line: &str) -> Result<Self, Error>
pub fn parse(line: &str) -> Result<Self, Error>
Parse a JSONL line into a SessionEntry.
If the line has an entry_type field, it is deserialized as a tagged enum.
Otherwise, it is treated as a raw LlmMessage (backward compatibility).
Sourcepub const fn as_message(&self) -> Option<&LlmMessage>
pub const fn as_message(&self) -> Option<&LlmMessage>
Returns the contained LlmMessage if this is a Message variant.
Sourcepub fn messages(entries: &[Self]) -> Vec<&LlmMessage>
pub fn messages(entries: &[Self]) -> Vec<&LlmMessage>
Extract only Message entries from a slice, returning the LlmMessage values.
Sourcepub const fn entry_type_name(&self) -> &'static str
pub const fn entry_type_name(&self) -> &'static str
Returns the serde discriminator string for this entry variant.
Matches the rename_all = "snake_case" representation used in serialization.
Trait Implementations§
Source§impl Clone for SessionEntry
impl Clone for SessionEntry
Source§impl Debug for SessionEntry
impl Debug for SessionEntry
Source§impl<'de> Deserialize<'de> for SessionEntry
impl<'de> Deserialize<'de> for SessionEntry
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Auto Trait Implementations§
impl Freeze for SessionEntry
impl RefUnwindSafe for SessionEntry
impl Send for SessionEntry
impl Sync for SessionEntry
impl Unpin for SessionEntry
impl UnsafeUnpin for SessionEntry
impl UnwindSafe for SessionEntry
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,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be
downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further
downcast into Rc<ConcreteType> where ConcreteType implements Trait.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &Any’s vtable from &Trait’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot
generate &mut Any’s vtable from &mut Trait’s.Source§impl<T> DowncastSend for T
impl<T> DowncastSend for T
Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
impl<T> Fruit for T
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 more