Ctrl K
ComunidadGuías…

Cargo.toml

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
[workspace]
resolver = "2"
members = [
  # editions
  "crates/workspace-hack",
  # editions
  "editions/oss/modules",
  "editions/oss/api",
  "editions/oss/workers",
  "editions/oss/openapi",
  "editions/oss/standalone",
  # meteroid
  "modules/meteroid",
  "modules/meteroid/crates/meteroid-app",
  "modules/meteroid/crates/meteroid-grpc-mapping",
  "modules/meteroid/crates/meteroid-api",
  "modules/meteroid/crates/meteroid-kit",
  "modules/meteroid/crates/meteroid-rest",
  "modules/meteroid/crates/meteroid-rest-common",
  "modules/meteroid/crates/meteroid-workers",
  "modules/meteroid/crates/meteroid-grpc",
  "modules/meteroid/crates/meteroid-tax",
  "modules/meteroid/crates/stripe-client",
  "modules/meteroid/crates/gocardless-client",
  "modules/meteroid/crates/stancer-client",
  "modules/meteroid/crates/mollie-client",
  "modules/meteroid/crates/hubspot-client",
  "modules/meteroid/crates/pennylane-client",
  "modules/meteroid/crates/diesel-models",
  "modules/meteroid/crates/diesel-schema",
  "modules/meteroid/crates/meteroid-store",
  "modules/meteroid/crates/meteroid-store-macros",
  "modules/meteroid/crates/meteroid-invoicing",
  "modules/meteroid/crates/meteroid-mailer",
  "modules/meteroid/crates/meteroid-oauth",
  "modules/meteroid/crates/meteroid-seeder",
  "modules/meteroid/crates/meteroid-testkit",
  "modules/meteroid/crates/meteroid-middleware",
  # metering
  "modules/metric-core",
  "modules/metering",
  "modules/metering/crates/metering-grpc",
  "modules/metering/crates/metering-server",
  # adapters
  "modules/adapters/slurm-collector",
  # shared
  "crates/kafka",
  "crates/golden",
  "crates/common-build-info",
  "crates/common-config",
  "crates/common-domain",
  "crates/common-eventbus",
  "crates/common-grpc",
  "crates/common-grpc-error-as-tonic-macros",
  "crates/common-grpc-error-as-tonic-macros-impl",
  "crates/common-logging",
  "crates/common-utils",
  "crates/distributed-lock",
  "crates/egress-guard",
  "crates/egress-http",
  "crates/http-client-tracing",
  "crates/secrecy",
  # enterprise
  "crates/license-protocol",
  "crates/rate-limiter",
  "crates/redis-rate-limiter",
  # vendored third-party (see crate LICENSE files)
  "crates/world-tax",
  # first-party fork of rusty-money (see crate LICENSE)
  "crates/meteroid-money",
]

[workspace.package]
license = "AGPL-3.0-only"
edition = "2024"
rust-version = "1.96"
repository = "https://github.com/meteroid-oss/meteroid"

# Backtraces keep file and line; full debuginfo made each debug binary ~2 GB and slowed linking.
# Set `debug = true` locally to step through code in a debugger.
[profile.dev]
debug = "line-tables-only"

[profile.dev.package."*"]
debug = false

# Proc macros get the build-override profile as dependencies, but the dev one when `--workspace`
# selects them; pinning both keeps one artifact, and with it one copy of everything above them.
[profile.dev.package.meteroid-store-macros]
debug = false

[profile.dev.package.common-grpc-error-as-tonic-macros-impl]
debug = false

# Same as dev, so `cargo test` reuses what `cargo build`/`cargo run` compiled.
[profile.test]
debug = "line-tables-only"

[workspace.dependencies]
anyhow = "1.0.75"
argon2 = "0.5.2"
async-trait = "0.1.74"
axum = { version = "0.8.1", features = ["json", "query", "tower-log", "http1"] }
axum-extra = { version = "0.12.5", default-features = false }
axum-valid = "0.24.0"
parquet = { version = "58.0.0", default-features = false }
base62 = "2.2.3"
base64 = "0.22.0"
backon = "1.5.2"
# Only to remove a test container whose start failed; the version testcontainers resolves.
bollard = { version = "0.20.2", default-features = false }
bytes = "1.10.1"
cached = "0.59.0"
chacha20poly1305 = "0.10.1"
chrono = { version = "0.4.31", default-features = false }
chrono-tz = { version = "0.10.3" }
croner = "2"
clap = "4.5.16"
clickhouse = { version = "0.15.0", default-features = false }
ctor = "1.0.6"
deadpool-runtime = "0.3.1"
diesel = { version = "2.3.7", features = ["chrono", "uuid", "serde_json", "numeric"] }
diesel-async = { version = "0.9.0", features = ["postgres", "deadpool"] }
diesel-derive-enum = { version = "2.1.0", features = ["postgres"] }
diesel_migrations = { version = "2.3.1", features = ["postgres"] }
diesel-derive-newtype = { version = "2.1.2" }
dotenvy = "0.15.7"
en16931 = "0.6.0"
en16931-formats = { version = "0.6.0", default-features = false, features = ["cii", "ubl", "zugferd"] }
env_logger = "0.11.5"
encoding_rs = "0.8"
envconfig = "0.11.0"
error-stack = "0.7.0"
ed25519-dalek = { version = "2.1", default-features = false, features = ["pkcs8", "pem", "rand_core"] }
educe = { version = "0.6.0", default-features = false, features = ["Default"] }
fluent-static = "0.5.0"
fluent-syntax = "0.12"
fred = { version = "10.1.0", features = ["enable-rustls-ring"] }
futures = "0.3.28"
futures-util = { version = "0.3.29", features = [] }
governor = "0.10.0"
hex = "0.4.3"
hmac = "0.13.0"
hmac-sha256 = "1.1.7"
http = { version = "1.3.1" }
http-body = "1.0.1"
humantime = { version = "2.3.0" }
hyper = { version = "1.7.0", default-features = false }
image = "0.25.2"
ordermap = "1.0.0"
init-tracing-opentelemetry = { version = "0.38.0" }
axum-tracing-opentelemetry = { version = "0.38.0" }
insta = { version = "1.43.1", features = ["json"] }
itertools = "0.14.0"
jsonwebtoken = { version = "10.0.0", default-features = false }
lazy_static = "1.5.0"
lettre = { version = "0.11.21", default-features = false }
log = "0.4.20"
# Kept in lockstep with what en16931-formats' `zugferd` feature pulls, so the
# hybrid PDF is written and read back through one PDF implementation.
lopdf = { version = "0.44", default-features = false }
mockall = "0.14.0"
moka = { version = "0.12.10", features = ["log", "logging", "sync"] }
nanoid = "0.5.0"
nonzero_ext = { version = "0.3.0", default-features = false }
# The HTTP client comes from oauth2-reqwest; oauth2's default one is reqwest 0.12.
oauth2 = { version = "5.0.0", default-features = false }
oauth2-reqwest = "0.1.0-alpha.3"
o2o = { version = "0.5.3", default-features = false, features = ["syn2"] }
object_store = { version = "0.13.2", default-features = false }
once_cell = "1.18.0"
opentelemetry = { version = "0.32.0", features = ["metrics", "trace", "logs"] }
opentelemetry-otlp = { version = "0.32.0", default-features = false, features = ["grpc-tonic", "internal-logs", "logs", "metrics", "trace"] }
opentelemetry_sdk = { version = "0.32.0", features = ["trace", "metrics", "rt-tokio", "rt-tokio-current-thread"] }
opentelemetry-appender-tracing = { version = "0.32.0" }
opentelemetry-resource-detectors = { version = "0.11.0" }
paste = "1.0.15"
pbjson-build = "0.9.0"
pin-project = "1.1.3"
proc-macro2 = { version = "1.0.78" }
prost = "0.14.1"
prost-build = "0.14.1"
prost-types = "0.14.1"
quick_cache = "0.6.2"
quote = "1.0.35"
lazy-regex = "3"
rand = "0.10.0"
rdkafka = "0.39.0"
refinery-core = { version = "0.9.0" }
refinery = { version = "0.9.0", default-features = false }
# No crypto provider: build clients with http_client_tracing::client_builder, which installs ring.
reqwest = { version = "0.13.2", default-features = false, features = ["rustls-no-provider", "charset", "http2", "system-proxy"] }
hickory-resolver = { version = "0.26.1", default-features = false, features = ["tokio", "system-config"] }
reqwest-retry = { version = "0.9.1", default-features = false }
reqwest-middleware = { version = "0.5.1", default-features = false }
rstest = "0.26.1"
rust_decimal = "1.32.0"
rust_decimal_macros = "1.32.0"
rust_iso3166 = "0.1.14"
rustls = { version = "0.23.12", default-features = false }
sailfish = "0.11.1"
scoped-futures = "0.1.4"
sealed = "0.6.0"
secrecy = { path = "crates/secrecy", default-features = false }
serde = { version = "1.0.189", default-features = false }
serde-enum-str = "0.5.0"
serde_json = { version = "1.0.107", features = ["preserve_order"] }
serde_path_to_error = "0.1.14"
serde_with = "3.11.0"
serde_qs = "1.0.0"
serde_html_form = "0.4.0"
sha2 = "0.11.0"
signature = "2.2.0"
syn = "2.0.52"
strum = { version = "0.28", default-features = false }
tap = "1.0.1"
testcontainers = { version = "0.27.1", features = ["watchdog"] }
thiserror = "2.0.3"
# 0.3.47 fixes RUSTSEC-2026-0009; 0.3.48 reintroduces an E0119 coherence break
# with typst-library 0.14.2 under Rust 1.94, so cap below it until typst is upgraded.
time = ">=0.3.47, <0.3.48"
tokio = { version = "1.33.0", default-features = false }
tokio-postgres = { version = "0.7.7", default-features = false }
tokio-postgres-rustls = "0.14.0"
tokio-util = "0.7.10"
totp-rs = { version = "5.7", default-features = false, features = ["gen_secret", "otpauth"] }
tonic = "0.14.2"
tonic-health = "0.14.2"
tonic-prost = "0.14.2"
tonic-reflection = "0.14.2"
tonic-tracing-opentelemetry = "0.38.0"
tonic-web = "0.14.2"
tonic-prost-build = "0.14.2"
tower = { version = "0.5.0" }
tower-http = { version = "0.6.1", features = ["add-extension", "auth", "catch-panic", "cors", "limit", "set-header", "trace"] }
tower-layer = { version = "0.3.3" }
tracing = { version = "0.1.39", features = ["log"] }
tracing-log = "0.2.0"
tracing-subscriber = { version = "0.3.18", features = ["registry", "tracing-log", "fmt", "env-filter", "json"] }
# Held by meteroid-invoicing as a pin on typst's transitive dependency.
# ecow 0.2.7 adds extra AsRef<_> impls on EcoString, making `self.as_ref().repr()` in
# typst-library 0.14.x ambiguous (E0282) under Rust 1.94. Pin to the last working release.
ecow = "=0.2.6"
typst = { version = "0.14.1" }
typst-pdf = { version = "0.14.1" }
typst-svg = { version = "0.14.1" }
typst-as-lib = { version = "0.15.0", features = [] }
unic-langid = "0.9"
url = "2.5"
urlencoding = "2.1"
uuid = "1.18"
# meteroid-oss fork of utoipa, published to crates.io as `meteroid-utoipa*` and aliased
# back to `utoipa*` so the derive macros' generated `utoipa::` paths resolve unchanged.
utoipa = { package = "meteroid-utoipa", version = "5.6.0", features = ["axum_extras", "uuid", "debug", "chrono", "decimal", "tagged_discriminator", "config"] }
utoipa-config = { package = "meteroid-utoipa-config", version = "0.1.2" }
utoipa-axum = { package = "meteroid-utoipa-axum", version = "0.2.0" }
utoipa-scalar = { package = "meteroid-utoipa-scalar", version = "0.3.0", features = ["axum"] }
validator = { version = "0.20.0" }
zeroize = { version = "1.6", default-features = false, features = ["alloc"] }


# TODO prefix it all
golden = { path = "crates/golden" }
common-build-info = { path = "crates/common-build-info" }
common-domain = { path = "crates/common-domain" }
common-config = { path = "crates/common-config" }
common-eventbus = { path = "crates/common-eventbus" }
common-logging = { path = "crates/common-logging" }
common-grpc = { path = "crates/common-grpc" }
common-grpc-error-as-tonic-macros = { path = "crates/common-grpc-error-as-tonic-macros" }
common-grpc-error-as-tonic-macros-impl = { path = "crates/common-grpc-error-as-tonic-macros-impl" }
metering-grpc = { path = "modules/metering/crates/metering-grpc" }
meteroid-grpc = { path = "modules/meteroid/crates/meteroid-grpc" }
common-utils = { path = "crates/common-utils" }
distributed-lock = { path = "crates/distributed-lock", default-features = false }
egress-guard = { path = "crates/egress-guard" }
egress-http = { path = "crates/egress-http" }
license-protocol = { path = "crates/license-protocol" }
http-client-tracing = { path = "crates/http-client-tracing" }
world-tax = { path = "crates/world-tax" }
meteroid-money = { path = "crates/meteroid-money" }
kafka = { path = "crates/kafka" }
metering = { path = "modules/metering" }
metering-server = { path = "modules/metering/crates/metering-server", default-features = false }
metric-core = { path = "modules/metric-core" }
diesel-models = { path = "modules/meteroid/crates/diesel-models" }
diesel-schema = { path = "modules/meteroid/crates/diesel-schema" }
meteroid-store = { path = "modules/meteroid/crates/meteroid-store" }
meteroid-store-macros = { path = "modules/meteroid/crates/meteroid-store-macros" }
meteroid-invoicing = { path = "modules/meteroid/crates/meteroid-invoicing" }
meteroid-mailer = { path = "modules/meteroid/crates/meteroid-mailer" }
meteroid-middleware = { path = "modules/meteroid/crates/meteroid-middleware" }
stripe-client = { path = "modules/meteroid/crates/stripe-client" }
gocardless-client = { path = "modules/meteroid/crates/gocardless-client" }
stancer-client = { path = "modules/meteroid/crates/stancer-client" }
mollie-client = { path = "modules/meteroid/crates/mollie-client" }
meteroid-oauth = { path = "modules/meteroid/crates/meteroid-oauth" }
meteroid-seeder = { path = "modules/meteroid/crates/meteroid-seeder" }
meteroid-testkit = { path = "modules/meteroid/crates/meteroid-testkit" }
meteroid-app = { path = "modules/meteroid/crates/meteroid-app" }
meteroid-grpc-mapping = { path = "modules/meteroid/crates/meteroid-grpc-mapping" }
meteroid-api = { path = "modules/meteroid/crates/meteroid-api" }
meteroid-kit = { path = "modules/meteroid/crates/meteroid-kit" }
meteroid-rest = { path = "modules/meteroid/crates/meteroid-rest" }
meteroid-rest-common = { path = "modules/meteroid/crates/meteroid-rest-common" }
meteroid-workers = { path = "modules/meteroid/crates/meteroid-workers" }
hubspot-client = { path = "modules/meteroid/crates/hubspot-client" }
pennylane-client = { path = "modules/meteroid/crates/pennylane-client" }
meteroid-tax = { path = "modules/meteroid/crates/meteroid-tax" }
meteroid-rs-dogfooding = { package = "meteroid-rs", version = "0.29.0" }
rate-limiter = { path = "crates/rate-limiter" }
redis-rate-limiter = { path = "crates/redis-rate-limiter" }

[patch.crates-io]