use std::{borrow::Cow, path::PathBuf}; use gix_object::bstr::ByteSlice; /// Returned as part of [`crate::alternate::Error::Parse`] #[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), #[error("Could not unquote alternate path")] Unquote(#[from] gix_quote::ansi_c::undo::Error), } pub(crate) fn content(input: &[u8]) -> Result, 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) }