[package] name = "weed-volume" version = "0.1.0" edition = "2021" description = "SeaweedFS Volume Server — Rust implementation" [lib] name = "seaweed_volume" [[bin]] name = "weed-volume" path = "src/main.rs" [features] # Default: 5-byte offsets (8TB max volume size), matching production Go builds (-tags 5BytesOffset). # Disable with --no-default-features for 4-byte offsets (32GB max volume size). default = ["5bytes"] 5bytes = [] [dependencies] # Async runtime tokio = { version = "1", features = ["full"] } tokio-stream = { version = "0.1", features = ["net"] } tokio-io-timeout = "1" # gRPC + protobuf tonic = { version = "0.12", features = ["tls"] } tonic-reflection = "0.12" prost = "0.13" prost-types = "0.13" # HTTP server axum = { version = "0.7", features = ["multipart"] } http-body = "1" hyper = { version = "1", features = ["full"] } hyper-util = { version = "0.1", features = ["tokio", "service", "server-auto", "http1", "http2"] } tower = "0.4" tower-http = { version = "0.5", features = ["cors", "trace"] } # CLI clap = { version = "4", features = ["derive"] } # Metrics prometheus = { version = "0.13", default-features = false, features = ["process"] } lazy_static = "1" # JWT jsonwebtoken = { version = "10", features = ["rust_crypto"] } # TLS rustls = "0.23" tokio-rustls = "0.26" rustls-pemfile = "2" # LevelDB (via RocksDB for better Rust support) # Using rusty-leveldb for pure Rust LevelDB rusty-leveldb = "3" # Disk-backed needle map (alternative to in-memory HashMap) redb = "3" # Reed-Solomon erasure coding reed-solomon-erasure = "6" # Logging tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Config toml = "0.8" serde = { version = "1", features = ["derive"] } serde_json = "1" serde_urlencoded = "0.7" # CRC32 — using Castagnoli polynomial (CRC32-C), matching Go's crc32.Castagnoli crc32c = "0.6" crc32fast = "1" # Memory-mapped files memmap2 = "0.9" # UUID uuid = { version = "1", features = ["v4"] } # HTTP client (for proxying, remote fetch) reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "stream", "multipart", "json"] } # Content hashing md-5 = "0.10" base64 = "0.22" # Compression flate2 = "1" # Image processing image = { version = "0.25", default-features = false, features = ["png", "jpeg", "gif", "webp"] } kamadak-exif = "0.5" # Multipart form-data parsing multer = "3" # MIME type guessing from file extensions mime_guess = "2" # Misc bytes = "1" rand = "0.8" chrono = "0.4" hex = "0.4" parking_lot = "0.12" dashmap = "6" thiserror = "1" anyhow = "1" async-trait = "0.1" futures = "0.3" async-stream = "0.3" x509-parser = "0.16" # Disk space checking sysinfo = "0.31" libc = "0.2" # AWS S3 SDK (for remote storage backends) aws-config = { version = "1", features = ["behavior-version-latest"] } aws-sdk-s3 = { version = "1.125.0", default-features = false, features = ["sigv4a", "http-1x", "default-https-client", "rt-tokio"] } aws-credential-types = "1" aws-types = "1" # pprof is Unix-only (requires libc/nix APIs not available on Windows) [target.'cfg(unix)'.dependencies] pprof = { version = "0.15", features = ["prost-codec"] } [dev-dependencies] tempfile = "3" [build-dependencies] tonic-build = "0.12" [patch.crates-io] reed-solomon-erasure = { path = "vendor/reed-solomon-erasure" }