use std::fmt::Write;
use crate::{
formatter::pattern_formatter::{Pattern, PatternContext},
Error, Record, StringBuf,
};
#[derive(Clone, Default)]
pub struct ProcessId;
impl Pattern for ProcessId {
fn format(
&self,
_record: &Record,
dest: &mut StringBuf,
_ctx: &mut PatternContext,
) -> crate::Result<()> {
let pid = get_current_process_id();
write!(dest, "{}", pid).map_err(Error::FormatRecord)
}
}
#[cfg(target_family = "unix")]
#[must_use]
fn get_current_process_id() -> u64 {
let pid = unsafe { libc::getpid() };
pid as u64
}
#[cfg(target_os = "windows")]
#[must_use]
fn get_current_process_id() -> u64 {
let pid = unsafe { winapi::um::processthreadsapi::GetCurrentProcessId() };
pid as u64
}