use std::io::{self, Read};
use git_lfs_pointer::{MAX_POINTER_SIZE, Pointer};
mod clean;
mod filter_process;
mod smudge;
pub use clean::{CleanError, CleanExtension, CleanOutcome, clean};
pub use filter_process::{FilterProcessError, filter_process};
pub use smudge::{
SmudgeError, SmudgeExtension, SmudgeOutcome, smudge, smudge_object_to, smudge_with_fetch,
};
pub type FetchError = Box<dyn std::error::Error + Send + Sync>;
fn detect_pointer<R: Read>(input: &mut R) -> io::Result<(Vec<u8>, Option<Pointer>)> {
let mut head = vec![0u8; MAX_POINTER_SIZE];
let mut filled = 0;
while filled < head.len() {
match input.read(&mut head[filled..])? {
0 => break,
n => filled += n,
}
}
head.truncate(filled);
let pointer = if filled < MAX_POINTER_SIZE {
Pointer::parse(&head).ok()
} else {
None
};
Ok((head, pointer))
}