grr-cli 2.1.2

Google tools from the terminal, at maximum performance: 401 methods across 14 Google APIs in one generated command tree, zero-config, over HTTP/3
Documentation
# `panic = "immediate-abort"` in [profile.release] is still an unstable profile
# key and needs a feature gate. This repo's `.cargo/config.toml` supplies one
# locally, but the PUBLISHED manifest must parse in environments that never see
# that file - docs.rs runs plain `cargo metadata` and failed every build with
# "invalid Cargo.toml syntax" because of it. The manifest-level opt-in below is
# the one gate that travels with the crate. It changes nothing for consumers:
# the crate has always required nightly. (`trim-paths` was listed here too
# until Cargo stabilized it in 1.101, leaving the gate unused and warning.)
cargo-features = ["panic-immediate-abort"]

[workspace]
resolver = "2"

[package]
name = "grr-cli"
version = "2.1.2"
edition = "2024"
license = "MIT"
authors = ["Debanjan Basu <debanjanbasu2006@gmail.com>"]
repository = "https://github.com/debanjanbasu/grr-cli"
homepage = "https://grr-cli.pages.dev"
documentation = "https://grr-cli.pages.dev/docs/"
description = "Google tools from the terminal, at maximum performance: 401 methods across 14 Google APIs in one generated command tree, zero-config, over HTTP/3"
readme = "README.md"
keywords = ["google", "gmail", "http3", "cli", "oauth"]
categories = ["command-line-utilities", "api-bindings", "email", "network-programming", "web-programming"]

[package.metadata.docs.rs]
# docs.rs supplies neither this repo's .cargo/config.toml nor its rustflags,
# so reqwest's http3 feature fails to compile there ("requires the
# RUSTFLAGS='--cfg reqwest_unstable' environment variable") — the second
# docs.rs failure layer after the unstable manifest keys. cargo-args reaches
# every compilation unit, dependencies included.
cargo-args = ["--config", 'build.rustflags=["--cfg","reqwest_unstable","--cfg","hyper_unstable_ffi","--cfg","tokio_unstable"]']

[lib]
name = "grr_cli"
path = "src/lib.rs"

[[bin]]
name = "grr"
path = "src/main.rs"
required-features = ["cli"]

[dependencies]
reqwest = { version = "0.13.5", default-features = false, features = ["http2", "http3", "rustls", "json", "form", "gzip", "deflate", "zstd", "brotli"] }
tokio = { version = "1.53.2", features = ["macros", "rt-multi-thread", "sync", "time", "fs", "net", "io-util", "io-std", "process"] }
serde = { version = "1.0.229", features = ["derive"] }
serde_json = "1.0.154"
url = "2.5.8"
clap = { version = "4.6.7", features = ["derive", "env", "wrap_help", "string", "help", "usage", "cargo", "color", "unicode"] }
clap_complete = { version = "4.6.11", optional = true }
dirs = "7.0.0"
figment = { version = "0.10.19", features = ["env", "toml"] }
tracing = { version = "0.1.44", features = ["std"] }
tracing-subscriber = { version = "0.3.23", features = ["env-filter", "fmt"], optional = true }
anyhow = "1.0.104"
thiserror = "2.0.21"
base64 = { version = "0.23.1", features = ["alloc", "std"] }
rand = { version = "0.10.3", features = ["std"] }
sha2 = "0.11.1"
# 3-way text merge for self-migrating skill installs (`grr skills`): pure
# Rust, diff3-class merge, no CRDT/editor machinery and no wire-format schema.
# Deliberately NOT automerge (built for concurrent editors) or capnproto
# (schema evolution for wire formats) — 16 markdown files need a file merge.
diffy = "0.5.2"
urlencoding = "2.1.3"
open = "5.4"
keyring = { version = "4.2.0", features = ["windows-native-keyring-store", "apple-native-keyring-store", "zbus-secret-service-keyring-store"] }
comfy-table = "8.0"

# The io_uring availability probe (core::runtime) feeds `grr transport`'s
# report and uses the bare `io-uring` crate; tokio-uring went with the
# typed-client file-I/O path (it was its only user, and it dragged in a
# duplicate io-uring + old socket2/bitflags).
[target.'cfg(target_os = "linux")'.dependencies]
io-uring = "0.7.15"

[dev-dependencies]
wiremock = "0.6.5"
tempfile = "3.27.0"
assert_cmd = "2.2"
predicates = "3.1"

[features]
default = ["cli"]
# The typed service clients and their per-service features are gone: the
# command tree is generated from the embedded Discovery index, and the CLI
# needs only the engine - core (auth/HTTP), discovery, output formatting.
cli = ["dep:tracing-subscriber", "dep:clap_complete"]

[profile.dev]
opt-level = 1
panic = "abort"
incremental = true
debug = 1

[profile.dev.package."*"]
opt-level = 3

[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
# Skips the panic hook and message formatting entirely; paired with
# build-std in .cargo/config.toml so std loses its panic strings too.
panic = "immediate-abort"
strip = "symbols"
incremental = false
overflow-checks = false
# Keep local filesystem paths out of distributed binaries.
trim-paths = "all"

[profile.release.build-override]
opt-level = 3

[profile.bench]
opt-level = 3
lto = "fat"
codegen-units = 1
debug = 1

[profile.test]
opt-level = 3
lto = "fat"
codegen-units = 1