use packet_dissector_core::field::{Field, FormatContext};
use packet_dissector_core::packet::Layer;
pub fn format_field_to_string(
field: &Field<'_>,
data: &[u8],
layer: &Layer,
scratch: &[u8],
) -> Option<String> {
let format_fn = field.descriptor.format_fn?;
let ctx = FormatContext {
packet_data: data,
scratch,
layer_range: layer.range.start as u32..layer.range.end as u32,
field_range: field.range.start as u32..field.range.end as u32,
};
let mut out = Vec::new();
format_fn(&field.value, &ctx, &mut out).ok()?;
let s = String::from_utf8(out).ok()?;
if s.starts_with('"') && s.ends_with('"') && s.len() >= 2 {
Some(s[1..s.len() - 1].to_string())
} else {
Some(s)
}
}