exarch_core/
lib.rs

1//! Memory-safe archive extraction library with security validation.
2//!
3//! `exarch-core` provides a safe API for extracting archive files (tar, zip)
4//! with built-in protection against common security vulnerabilities like
5//! path traversal, zip bombs, symlink attacks, and hardlink attacks.
6//!
7//! # Examples
8//!
9//! ```no_run
10//! use exarch_core::SecurityConfig;
11//! use exarch_core::extract_archive;
12//!
13//! # fn main() -> Result<(), Box<dyn std::error::Error>> {
14//! let config = SecurityConfig::default();
15//! let report = extract_archive("archive.tar.gz", "/output/dir", &config)?;
16//! println!("Extracted {} files", report.files_extracted);
17//! # Ok(())
18//! # }
19//! ```
20
21#![deny(unsafe_code)]
22#![warn(missing_docs)]
23
24pub mod api;
25pub mod archive;
26pub mod config;
27pub mod copy;
28pub mod creation;
29pub mod error;
30pub mod formats;
31pub mod inspection;
32pub mod io;
33pub mod report;
34pub mod security;
35pub mod test_utils;
36pub mod types;
37
38// Re-export main API types
39pub use api::create_archive;
40pub use api::create_archive_with_progress;
41pub use api::extract_archive;
42pub use api::extract_archive_with_progress;
43pub use api::list_archive;
44pub use api::verify_archive;
45pub use archive::Archive;
46pub use archive::ArchiveBuilder;
47pub use config::SecurityConfig;
48pub use error::ExtractionError;
49pub use error::FfiErrorMessage;
50pub use error::QuotaResource;
51pub use error::Result;
52pub use report::ExtractionReport;
53pub use report::NoopProgress;
54pub use report::ProgressCallback;
55
56// Re-export creation types
57pub use creation::ArchiveCreator;
58pub use creation::CreationConfig;
59pub use creation::CreationReport;
60
61// Re-export inspection types
62pub use inspection::ArchiveEntry;
63pub use inspection::ArchiveManifest;
64pub use inspection::CheckStatus;
65pub use inspection::IssueCategory;
66pub use inspection::IssueSeverity;
67pub use inspection::ManifestEntryType;
68pub use inspection::VerificationIssue;
69pub use inspection::VerificationReport;
70pub use inspection::VerificationStatus;
71
72// Re-export types module for easier access
73pub use types::DestDir;
74pub use types::EntryType;
75pub use types::SafePath;
76pub use types::SafeSymlink;