gix_odb/alternate/
parse.rsuse std::{borrow::Cow, path::PathBuf};
use gix_object::bstr::ByteSlice;
#[derive(thiserror::Error, Debug)]
#[allow(missing_docs)]
pub enum Error {
#[error("Could not obtain an object path for the alternate directory '{}'", String::from_utf8_lossy(.0))]
PathConversion(Vec<u8>),
#[error("Could not unquote alternate path")]
Unquote(#[from] gix_quote::ansi_c::undo::Error),
}
pub(crate) fn content(input: &[u8]) -> Result<Vec<PathBuf>, Error> {
let mut out = Vec::new();
for line in input.split(|b| *b == b'\n') {
let line = line.as_bstr();
if line.is_empty() || line.starts_with(b"#") {
continue;
}
out.push(
gix_path::try_from_bstr(if line.starts_with(b"\"") {
gix_quote::ansi_c::undo(line)?.0
} else {
Cow::Borrowed(line)
})
.map_err(|_| Error::PathConversion(line.to_vec()))?
.into_owned(),
);
}
Ok(out)
}