mod codec;
mod model;
mod verify;
pub use model::{
EXACT_RETRIEVAL_SEMANTICS_VERSION, ExactRetrievalProof, ExactRetrievalProofArtifact,
ExactRetrievalVerificationReport, HYBRID_RETRIEVAL_SEMANTICS_VERSION, HybridRetrievalProof,
HybridRetrievalProofArtifact, HybridRetrievalVerificationReport,
LEXICAL_RETRIEVAL_SEMANTICS_VERSION, LexicalRetrievalProof, LexicalRetrievalProofArtifact,
LexicalRetrievalVerificationReport, MAX_RETRIEVAL_PROOF_BYTES, RETRIEVAL_PROOF_FORMAT_VERSION,
RetrievalProofAnchor, RetrievalProofError, RetrievalVerificationLimits,
};
pub use verify::{
read_exact_retrieval_proof, read_hybrid_retrieval_proof, read_lexical_retrieval_proof,
verify_exact_retrieval_proof, verify_hybrid_retrieval_proof, verify_lexical_retrieval_proof,
write_exact_retrieval_proof, write_hybrid_retrieval_proof, write_lexical_retrieval_proof,
};
use hyphae_retrieval::{
ExactRetrievalOutcome, ExactRetrievalRequest, HybridOutcome, HybridRequest, LexicalOutcome,
LexicalRequest,
};
use hyphae_storage::SnapshotInfo;
use self::codec::{
decode_hybrid_proof, decode_lexical_proof, decode_proof, encode_hybrid_proof,
encode_lexical_proof, encode_proof, finalize_hybrid_proof, finalize_lexical_proof,
finalize_proof,
};
impl ExactRetrievalProof {
pub fn new(
snapshot: &SnapshotInfo,
request: ExactRetrievalRequest,
outcome: ExactRetrievalOutcome,
) -> Result<Self, RetrievalProofError> {
if snapshot.disk_format_version != 2 {
return Err(RetrievalProofError::SnapshotFormatMismatch);
}
finalize_proof(
RetrievalProofAnchor::from_snapshot(snapshot),
request,
outcome,
)
}
pub fn to_bytes(&self) -> Result<Vec<u8>, RetrievalProofError> {
encode_proof(self)
}
pub fn from_bytes(encoded: &[u8]) -> Result<Self, RetrievalProofError> {
decode_proof(encoded)
}
}
impl LexicalRetrievalProof {
pub fn new(
snapshot: &SnapshotInfo,
request: LexicalRequest,
outcome: LexicalOutcome,
) -> Result<Self, RetrievalProofError> {
if snapshot.disk_format_version != 2 {
return Err(RetrievalProofError::SnapshotFormatMismatch);
}
finalize_lexical_proof(
RetrievalProofAnchor::from_snapshot(snapshot),
request,
outcome,
)
}
pub fn to_bytes(&self) -> Result<Vec<u8>, RetrievalProofError> {
encode_lexical_proof(self)
}
pub fn from_bytes(encoded: &[u8]) -> Result<Self, RetrievalProofError> {
decode_lexical_proof(encoded)
}
}
impl HybridRetrievalProof {
#[allow(clippy::too_many_arguments)]
pub fn new(
snapshot: &SnapshotInfo,
lexical_request: LexicalRequest,
lexical_outcome: LexicalOutcome,
vector_request: ExactRetrievalRequest,
vector_outcome: ExactRetrievalOutcome,
fusion_request: HybridRequest,
outcome: HybridOutcome,
) -> Result<Self, RetrievalProofError> {
if snapshot.disk_format_version != 2 {
return Err(RetrievalProofError::SnapshotFormatMismatch);
}
finalize_hybrid_proof(
RetrievalProofAnchor::from_snapshot(snapshot),
lexical_request,
lexical_outcome,
vector_request,
vector_outcome,
fusion_request,
outcome,
)
}
pub fn to_bytes(&self) -> Result<Vec<u8>, RetrievalProofError> {
encode_hybrid_proof(self)
}
pub fn from_bytes(encoded: &[u8]) -> Result<Self, RetrievalProofError> {
decode_hybrid_proof(encoded)
}
}