pub struct SessionContext {
pub session_id: String,
pub client_ip: IpAddr,
pub protocol: String,
pub username: Option<String>,
}Expand description
Session context for structured logging
Contains all session-level information that should be attached to log events:
- Unique session ID
- Client IP address
- Protocol name (SMTP, IMAP, POP3, JMAP)
- Optional authenticated username
Fields§
§session_id: StringUnique session identifier (UUID v4)
client_ip: IpAddrClient IP address
protocol: StringProtocol name (e.g., “SMTP”, “IMAP”, “POP3”, “JMAP”)
username: Option<String>Authenticated username (if any)
Implementations§
Source§impl SessionContext
impl SessionContext
Sourcepub fn new(client_ip: IpAddr, protocol: impl Into<String>) -> Self
pub fn new(client_ip: IpAddr, protocol: impl Into<String>) -> Self
Create a new session context with a generated UUID
§Arguments
client_ip- The client’s IP addressprotocol- The protocol name (e.g., “SMTP”, “IMAP”)
§Example
use rusmes_server::session_logging::SessionContext;
use std::net::IpAddr;
let session = SessionContext::new(
IpAddr::from([192, 168, 1, 100]),
"SMTP",
);Sourcepub fn with_id(
session_id: impl Into<String>,
client_ip: IpAddr,
protocol: impl Into<String>,
) -> Self
pub fn with_id( session_id: impl Into<String>, client_ip: IpAddr, protocol: impl Into<String>, ) -> Self
Create a new session context with a custom session ID
Useful for testing or when you need a specific ID format.
§Arguments
session_id- Custom session IDclient_ip- The client’s IP addressprotocol- The protocol name
Sourcepub fn set_username(&mut self, username: impl Into<String>)
pub fn set_username(&mut self, username: impl Into<String>)
Set the authenticated username
Call this after successful authentication to include the username in all subsequent log events.
§Arguments
username- The authenticated username
Sourcepub fn session_id(&self) -> &str
pub fn session_id(&self) -> &str
Get the session ID
Trait Implementations§
Source§impl Clone for SessionContext
impl Clone for SessionContext
Source§fn clone(&self) -> SessionContext
fn clone(&self) -> SessionContext
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreAuto Trait Implementations§
impl Freeze for SessionContext
impl RefUnwindSafe for SessionContext
impl Send for SessionContext
impl Sync for SessionContext
impl Unpin for SessionContext
impl UnsafeUnpin for SessionContext
impl UnwindSafe for SessionContext
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
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> FutureExt for T
impl<T> FutureExt for T
Source§fn with_context(self, otel_cx: Context) -> WithContext<Self>
fn with_context(self, otel_cx: Context) -> WithContext<Self>
Source§fn with_current_context(self) -> WithContext<Self>
fn with_current_context(self) -> WithContext<Self>
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>
Converts
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>
Converts
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>
Wrap the input message
T in a tonic::Request