#![crate_name = "lfspull"]
#![warn(missing_docs)]
#![warn(unused_qualifications)]
#![deny(deprecated)]
mod repo_tools;
pub mod prelude {
use std::fmt::{Display, Formatter};
use vg_errortools::FatIOError;
#[derive(Debug, PartialEq, Eq, Copy, Clone)]
pub enum FilePullMode {
DownloadedFromRemote,
UsedLocalCache,
WasAlreadyPresent,
}
impl Display for FilePullMode {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
match self {
FilePullMode::DownloadedFromRemote => write!(f, "Downloaded from lfs server"),
FilePullMode::UsedLocalCache => write!(f, "Taken from local cache"),
FilePullMode::WasAlreadyPresent => write!(f, "File already pulled"),
}
}
}
#[derive(thiserror::Error, Debug)]
pub enum LFSError {
#[error("Remote server responded with 401 or 403")]
AccessDenied,
#[error("Remote server responded with not-okay code: {0}")]
ResponseNotOkay(String),
#[error("File IO error: {0}")]
FatFileIOError(#[from] FatIOError),
#[error("Could not parse file: {0}")]
InvalidFormat(&'static str),
#[error("Request-error: {0}")]
RequestError(#[from] reqwest::Error),
#[error("Remote file not found: {0}")]
RemoteFileNotFound(&'static str),
#[error("Checksum incorrect")]
ChecksumMismatch,
#[error("Could not decode oid-string to bytes: {0}")]
OidNotValidHex(#[from] hex::FromHexError),
#[error("Problem traversing directory structure: {0}")]
DirectoryTraversalError(String),
#[error("Could not parse remote URL: {0}")]
UrlParsingError(#[from] url::ParseError),
#[error("Invalid header value: {0}")]
InvalidHeaderValue(#[from] http::header::InvalidHeaderValue),
#[error("HTTP error: {0}")]
HTTP(#[from] http::Error),
#[error("Invalid HTTP response: {0}")]
InvalidResponse(String),
#[error("TempFile error: {0}")]
TempFile(String),
#[error("Maximum download attempts reached")]
ReachedMaxDownloadAttempt,
#[error("Download failed due to timeout")]
Timeout,
}
}
pub use prelude::FilePullMode;
pub use prelude::LFSError;
#[doc(inline)]
pub use repo_tools::glob_recurse_pull_directory;
#[doc(inline)]
pub use repo_tools::pull_file;
impl From<&'static str> for LFSError {
fn from(message: &'static str) -> Self {
LFSError::InvalidFormat(message)
}
}