A review against the Python client, which shares this client's config and login cache, found the transfers holding whole files in memory and several commands answering differently from their Python counterparts. - Stream uploads and downloads instead of buffering the whole file, so memory no longer scales with file size times concurrency. Uploads still declare a Content-Length rather than going out chunked. - Write a download beside its destination and move it into place once complete, and refuse a destination that cannot be written, so a failed transfer leaves what was already there untouched. - Report the server's own error detail instead of the bare status. - List locked sub-folders in `ls --json --recursive` using the given password and skip only those that cannot be unlocked, instead of failing the whole listing. - Name each folder's laboratory in JSON output and sort its entries, matching the Python client's schema and order. - Ask the server who is logged in for `whoami`, rather than trusting the cached name. - Collapse repeated separators and refuse `..` in remote paths. - Fall back to the API when a laboratory is missing from the cache, so a newly added one no longer needs a fresh login. - Verify the login cache digest on read, as the Python client does. - Accept `-e` as the short form of `--exclude`. - Satisfy clippy and rustfmt across the crate.
37 lines
940 B
TOML
37 lines
940 B
TOML
[package]
|
|
name = "mdrs-client-rust"
|
|
version = "2.0.1"
|
|
edition = "2024"
|
|
license = "MIT"
|
|
authors = ["Neuroinformatics Unit, RIKEN CBS"]
|
|
description = "A command-line client for uploading and downloading files to and from an MDRS-based repository."
|
|
|
|
[[bin]]
|
|
name = "mdrs"
|
|
path = "src/main.rs"
|
|
|
|
[dependencies]
|
|
clap = { version = "4.5", features = ["derive"] }
|
|
reqwest = { version = "0.12", default-features = false, features = ["json", "multipart", "rustls-tls", "stream"] }
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0.150"
|
|
tokio = { version = "1.52.3", features = ["full"] }
|
|
tokio-util = { version = "0.7", features = ["io"] }
|
|
futures = "0.3"
|
|
dirs = "6.0.0"
|
|
anyhow = "1.0.102"
|
|
configparser = "3.2.0"
|
|
sha2 = "0.11.0"
|
|
rpassword = "7.5.4"
|
|
base64 = "0.22"
|
|
fs2 = "0.4"
|
|
ctrlc = "3"
|
|
os_info = "3.15.0"
|
|
dotenvy = "0.15"
|
|
unicode-normalization = "0.1"
|
|
self-replace = "1"
|
|
tar = "0.4.46"
|
|
flate2 = "1"
|
|
zip = "8.6.0"
|
|
tempfile = "3"
|