Saltar al contenido principal

HasherService

HasherService define la API para calcular hashes de archivos, chunks, streams y buffers. Es abstracto; las implementaciones reales están en la capa de infraestructura. (e.j., Blake3HasherService en Rust).

Esta página documenta la API pública disponible para el SDK de Rust.

pub trait HasherService: Send + Sync {
...
}

Métodos

MétodoDevuelveDescripción
hash_file(file_path, root_dir, chunk_size)Result<FileEntry, HasherError>Devuelve un FileEntry calculando el hash del archivo y los hashes de los chunks.
hash_stream(stream, on_chunk)Result<Vec<Chunk>, HasherError>Procesa un stream de chunks y devuelve un array de chunks hasheados.
hash_buffer(data)Result<String, HasherError>Devuelve el hash de un buffer (string hex).
verify_chunk(data, expected_hash)Result<bool, HasherError>Verifica que un chunk tiene el hash esperado.
verify_file(path, expected_hash)Result<bool, HasherError>Verifica que un archivo tiene el hash esperado.
create_streaming_hasher()Box<dyn StreamingHasher + Send>Crea un objeto StreamingHasher para hashing incremental.

HasherError

Enum de errores personalizado para los resultados de HasherService. (Usa thiserror)

pub enum HasherError {
#[error("I/O error: {0}")]
Io(#[from] std::io::Error),

#[error("Invalid argument: {0}")]
InvalidArgument(String),

#[error("Hashing failed: {0}")]
Hash(String),

#[error("Unexpected error: {0}")]
Other(String),
}

Detalles de métodos

hash_file(file_path, root_dir, chunk_size)

Devuelve el FileEntry del archivo dado, calculando su hash y los hashes de sus chunks.

NOTA IMPORTANTE: el tamaño de chunk seleccionado debe ser el mismo en todas las operaciones de rac-delta

Parámetros:

NombreTipoDescripción
file_path&strRuta relativa del archivo (dir/file.txt)
root_dir&strDirectorio raíz del índice (dir)
chunk_sizeu64Tamaño en bytes de cada chunk (recomendado 1MB)

Devuelve: Result<FileEntry, HasherError>


hash_stream(stream, on_chunk)

Procesa un stream de chunks, opcionalmente llama a on_chunk para cada chunk procesado.

Parámetros:

NombreTipoDescripción
stream&mut (dyn AsyncChunkStream + Send)El stream de chunks de entrada.
on_chunkOption<Box<dyn Fn(Vec<u8>) + Send + Sync>>Callback opcional para cada chunk hasheado.
pub trait AsyncChunkStream: Send + Sync {
async fn next_chunk(&mut self) -> Option<Vec<u8>>;
async fn reset(&mut self) {}
async fn close(&mut self) {}
}

Devuelve: Result<Vec<Chunk>, HasherError>


hash_buffer(data)

Hashea un buffer.

ParámetroTipoDescripción
data&[u8]El buffer para hashear.

Devuelve: Result<String, HasherError> (hex string)


verify_chunk(data, expected_hash)

Comprueba si un chunk tiene el hash esperado.

ParámetroTipoDescripción
data&[u8]El chunk.
expected_hash&strHash esperado.

Devuelve: Result<bool, HasherError>


verify_file(path, expected_hash)

Comprueba si un archivo tiene el hash esperado.

ParámetroTipoDescripción
path&strRuta del archivo.
expected_hash&strHash esperado.

Devuelve: Result<bool, HasherError>


create_streaming_hasher()

Crea una instancia de StreamingHasher:

pub trait StreamingHasher: Send {
fn update(&mut self, data: &[u8]);
fn digest(&self) -> String;
}

Devuelve: Box<dyn StreamingHasher + Send>


Relacionado