Skip to main content

fallow_types/
serde_path.rs

1//! Custom serde serializers for `PathBuf` and `Vec<PathBuf>` that always
2//! output forward slashes, regardless of platform. This ensures consistent
3//! JSON/SARIF output on Windows.
4
5use std::path::{Path, PathBuf};
6
7use serde::Serializer;
8
9/// Serialize a `Path` with forward slashes for cross-platform consistency.
10pub fn serialize<S: Serializer>(path: &Path, s: S) -> Result<S::Ok, S::Error> {
11    s.serialize_str(&path.to_string_lossy().replace('\\', "/"))
12}
13
14/// Serialize a `Vec<PathBuf>` with forward slashes for cross-platform consistency.
15pub fn serialize_vec<S: Serializer>(paths: &[PathBuf], s: S) -> Result<S::Ok, S::Error> {
16    use serde::ser::SerializeSeq;
17    let mut seq = s.serialize_seq(Some(paths.len()))?;
18    for p in paths {
19        seq.serialize_element(&p.to_string_lossy().replace('\\', "/"))?;
20    }
21    seq.end()
22}