pub struct PerMessageFileWriter { /* private fields */ }Expand description
Writes every captured request and response to an independent file.
Independent files allow bodies to stream concurrently without frame interleaving or cross-message backpressure. Generated filenames use only portable ASCII characters and are bounded to 160 bytes, comfortably below the commonly supported 255-byte component limit. The caller-provided destination can still be rejected by the operating system when the complete path exceeds a platform-specific path limit. Raw URIs are never included because they can contain secrets, path separators, platform-specific characters, or unbounded input. Request and response files captured for the same HTTP exchange contain the same UUID, regardless of request/response writer layer order.
Files are created without overwriting existing paths. On Unix, newly created files receive owner-only read/write permissions before the process umask is applied. The destination directory is canonicalized and every file open is confined to it.
Implementations§
Source§impl PerMessageFileWriter
impl PerMessageFileWriter
Sourcepub async fn try_new(
directory: impl Into<PathBuf>,
prefix: impl AsRef<str>,
) -> Result<Self>
pub async fn try_new( directory: impl Into<PathBuf>, prefix: impl AsRef<str>, ) -> Result<Self>
Create a per-message file writer, creating directory when necessary.
prefix must be 1 to 32 ASCII letters, digits, -, or _. This
deliberately conservative alphabet is valid in filenames on Unix,
Windows, and common removable filesystems.
Sourcepub fn with_request_mode(self, mode: Option<WriterMode>) -> Self
pub fn with_request_mode(self, mode: Option<WriterMode>) -> Self
Set how request files are written.
Sourcepub fn with_response_mode(self, mode: Option<WriterMode>) -> Self
pub fn with_response_mode(self, mode: Option<WriterMode>) -> Self
Set how response files are written.
Sourcepub const fn request_mode(&self) -> Option<WriterMode>
pub const fn request_mode(&self) -> Option<WriterMode>
Return the configured request writer mode.
Sourcepub const fn response_mode(&self) -> Option<WriterMode>
pub const fn response_mode(&self) -> Option<WriterMode>
Return the configured response writer mode.
Trait Implementations§
Source§impl Clone for PerMessageFileWriter
impl Clone for PerMessageFileWriter
Source§impl Debug for PerMessageFileWriter
impl Debug for PerMessageFileWriter
Source§impl RequestWriter for PerMessageFileWriter
impl RequestWriter for PerMessageFileWriter
Source§async fn write_request(&self, request: Request)
async fn write_request(&self, request: Request)
Source§impl ResponseWriter for PerMessageFileWriter
impl ResponseWriter for PerMessageFileWriter
Source§async fn write_response(&self, response: Response)
async fn write_response(&self, response: Response)
Auto Trait Implementations§
impl Freeze for PerMessageFileWriter
impl RefUnwindSafe for PerMessageFileWriter
impl Send for PerMessageFileWriter
impl Sync for PerMessageFileWriter
impl Unpin for PerMessageFileWriter
impl UnsafeUnpin for PerMessageFileWriter
impl UnwindSafe for PerMessageFileWriter
Blanket Implementations§
Source§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
Source§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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> 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> ⓘ
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> Pointable for T
impl<T> Pointable for T
Source§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
Source§impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
impl<T, U> RamaTryFrom<T> for Uwhere
U: TryFrom<T>,
Source§impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
impl<T, U, CrateMarker> RamaTryInto<U, CrateMarker> for Twhere
U: RamaTryFrom<T, CrateMarker>,
type Error = <U as RamaTryFrom<T, CrateMarker>>::Error
fn rama_try_into(self) -> Result<U, <U as RamaTryFrom<T, CrateMarker>>::Error>
impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
Source§impl<V, F> ValueFormatter<&V> for F
impl<V, F> ValueFormatter<&V> for F
Source§const SHAPE: FieldShape<'static>
const SHAPE: FieldShape<'static>
metrique_require_explicit_impls only.Source§fn format_value(writer: impl ValueWriter, value: &&V)
fn format_value(writer: impl ValueWriter, value: &&V)
value to writerSource§impl<V, F> ValueFormatter<Arc<V>> for F
impl<V, F> ValueFormatter<Arc<V>> for F
Source§const SHAPE: FieldShape<'static>
const SHAPE: FieldShape<'static>
metrique_require_explicit_impls only.Source§fn format_value(writer: impl ValueWriter, value: &Arc<V>)
fn format_value(writer: impl ValueWriter, value: &Arc<V>)
value to writerSource§impl<V, F> ValueFormatter<Box<V>> for F
impl<V, F> ValueFormatter<Box<V>> for F
Source§const SHAPE: FieldShape<'static>
const SHAPE: FieldShape<'static>
metrique_require_explicit_impls only.Source§fn format_value(writer: impl ValueWriter, value: &Box<V>)
fn format_value(writer: impl ValueWriter, value: &Box<V>)
value to writerSource§impl<V, F> ValueFormatter<Cow<'_, V>> for F
impl<V, F> ValueFormatter<Cow<'_, V>> for F
Source§const SHAPE: FieldShape<'static>
const SHAPE: FieldShape<'static>
metrique_require_explicit_impls only.Source§fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
fn format_value(writer: impl ValueWriter, value: &Cow<'_, V>)
value to writerSource§impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
impl<V, F> ValueFormatter<Option<V>> for Fwhere
F: ValueFormatter<V> + ?Sized,
Source§const SHAPE: FieldShape<'static>
const SHAPE: FieldShape<'static>
metrique_require_explicit_impls only.Source§fn format_value(writer: impl ValueWriter, value: &Option<V>)
fn format_value(writer: impl ValueWriter, value: &Option<V>)
value to writer