arch-toolkit
Complete Rust toolkit for Arch Linux package management. Provides a unified API for interacting with Arch Linux package management, including AUR (Arch User Repository) operations, dependency resolution, package index queries, installation command building, news feeds, and security advisories.
Features
Current Features
-
AUR Operations (
aurfeature, enabled by default)- Package search via AUR RPC v5
- Detailed package information retrieval
- Package comments fetching and parsing
- PKGBUILD content retrieval
- Automatic rate limiting with exponential backoff
- Configurable retry policies with per-operation control
- Optional caching layer (memory and disk)
-
Dependency Parsing (
depsfeature)- Parse dependencies from PKGBUILD files (single-line and multi-line arrays)
- Parse dependencies from .SRCINFO files
- Parse dependency specifications with version constraints
- Parse pacman output for dependencies and conflicts
- Fetch .SRCINFO from AUR (requires
aurfeature)
Planned Features
- Package database queries
- Installation command building
- News feeds and security advisories
- PKGBUILD security analysis
Installation
Add arch-toolkit to your Cargo.toml:
[]
= "0.1.2"
Feature Flags
aur(default): AUR search, package info, comments, and PKGBUILD fetchingdeps: Dependency parsing from PKGBUILD, .SRCINFO, and pacman outputcache-disk: Enable disk-based caching for persistence across restarts
To disable default features:
= { = "0.1.2", = false, = ["aur"] }
To enable dependency parsing:
= { = "0.1.2", = ["deps"] }
To enable disk caching:
= { = "0.1.2", = ["cache-disk"] }
Quick Start
Basic Usage
use *;
async
Custom Configuration
use ArchClient;
use Duration;
let client = builder
.timeout
.user_agent
.max_retries
.build?;
Or configure via environment variables (perfect for CI/CD):
let client = builder
.from_env // Load configuration from environment
.build?;
Retry Policy Configuration
use ArchClient;
use RetryPolicy;
let retry_policy = RetryPolicy ;
let client = builder
.retry_policy
.build?;
Caching
Enable caching to reduce network requests:
use ArchClient;
use CacheConfigBuilder;
use Duration;
let cache_config = new
.enable_search
.search_ttl // 5 minutes
.enable_info
.info_ttl // 15 minutes
.enable_comments
.comments_ttl // 10 minutes
.memory_cache_size
.build;
let client = builder
.cache_config
.build?;
With disk caching (requires cache-disk feature):
let cache_config = new
.enable_search
.search_ttl
.enable_disk_cache // Persist across restarts
.build;
Fetch Comments
let comments = client.aur.comments.await?;
for comment in comments.iter.take
Fetch PKGBUILD
let pkgbuild = client.aur.pkgbuild.await?;
println!;
Parse Dependencies
Parse dependencies from PKGBUILD or .SRCINFO files:
use ;
// Parse PKGBUILD
let pkgbuild = r"depends=('glibc' 'python>=3.10')";
let = parse_pkgbuild_deps;
// Parse .SRCINFO
let srcinfo = r"depends = glibc\ndepends = python>=3.10";
let = parse_srcinfo_deps;
Health Checks
Monitor AUR service status:
// Quick health check
let is_healthy = client.health_check.await?;
// Detailed status with latency
let status = client.health_status.await?;
println!;
Examples
See the examples/ directory for comprehensive examples:
examples/aur_example.rs: Complete AUR operations demonstrationexamples/with_caching.rs: Caching layer usageexamples/env_config.rs: Environment variable configurationexamples/health_check.rs: Health check functionalityexamples/pkgbuild_example.rs: PKGBUILD dependency parsingexamples/srcinfo_example.rs: .SRCINFO parsing and fetching
Run examples with:
API Documentation
Full API documentation is available at docs.rs/arch-toolkit or build locally:
Rate Limiting
arch-toolkit automatically implements rate limiting for archlinux.org requests:
- Minimum 200ms delay between requests
- Exponential backoff on failures
- Serialized requests (one at a time) to prevent overwhelming the server
- Configurable retry policies
Error Handling
All operations return Result<T, ArchToolkitError>. Common error types:
ArchToolkitError::Network: HTTP request failuresArchToolkitError::Parse: JSON/HTML parsing errorsArchToolkitError::InvalidInput: Invalid parameters or URLsArchToolkitError::Timeout: Request timeoutArchToolkitError::EmptyInput: Empty input provided (with input validation)ArchToolkitError::InvalidPackageName: Invalid package name format
Input validation is enabled by default and validates package names and search queries against Arch Linux standards.
Requirements
- Rust 1.70 or later
- Tokio runtime (for async operations)
License
MIT