content: [workspace]
  resolver = "2"
  members = [
    # meteroid
    "modules/meteroid",
    "modules/meteroid/crates/meteroid-grpc",
    "modules/meteroid/crates/meteroid-tax",
    "modules/meteroid/crates/stripe-client",
    "modules/meteroid/crates/hubspot-client",
    "modules/meteroid/crates/pennylane-client",
    "modules/meteroid/crates/diesel-models",
    "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-middleware",
    # metering
    "modules/metering",
    "modules/metering/crates/metering-grpc",
    # adapters
    "modules/adapters/openstack",
    "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",
    # extra
    "extra/generator",
  ]
  
  [workspace.package]
  license = "AGPL-3.0-only"
  edition = "2024"
  rust-version = "1.90"
  repository = "https://github.com/meteroid-oss/meteroid"
  
  [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-valid = "0.24.0"
  parquet = { version = "56.0.0", default-features = false }
  base62 = "2.2.3"
  base64 = "0.22.0"
  backon = "1.5.2"
  build-info = "0.0.42"
  build-info-build = "0.0.42"
  bytes = "1.10.1"
  cached = "0.56.0"
  chacha20poly1305 = "0.10.1"
  chrono = { version = "0.4.31", default-features = false }
  chrono-tz = { version = "0.10.3" }
  clap = "4.5.16"
  clickhouse = { version = "0.14.0", default-features = false }
  ctor = "0.6.0"
  deadpool-postgres = "0.14.1"
  diesel = { version = "2.3.2", features = ["chrono", "uuid", "serde_json", "numeric"] }
  diesel-async = { version = "0.7.3", features = ["postgres", "deadpool"] }
  diesel-derive-enum = { version = "2.1.0", features = ["postgres"] }
  diesel_migrations = { version = "2.3.0", features = ["postgres"] }
  diesel-derive-newtype = { version = "2.1.2" }
  dotenvy = "0.15.7"
  env_logger = "0.11.5"
  envconfig = "0.11.0"
  error-stack = "0.6.0"
  educe = { version = "0.6.0", default-features = false, features = ["Default"] }
  fake = "4.0.0"
  fastrand = "2.0.1"
  fixnum = { version = "0.9.3", default-features = false }
  fluent = "0.17"
  fluent-static = "0.5.0"
  futures = "0.3.28"
  futures-lite = "2.3.0"
  futures-util = { version = "0.3.29", features = [] }
  governor = "0.10.0"
  hex = "0.4.3"
  hmac = "0.12.1"
  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"
  init-tracing-opentelemetry = { version = "0.32.0", features = ["tracing_subscriber_ext"] }
  insta = { version = "1.43.1", features = ["json"] }
  itertools = "0.14.0"
  jsonwebtoken = { version = "10.0.0", default-features = false }
  klickhouse = { default-features = false, version = "0.14.0" }
  lapin = "3.2.0"
  lazy_static = "1.5.0"
  lettre = { version = "0.11.11", default-features = false }
  log = "0.4.20"
  mockall = "0.13.1"
  moka = { version = "0.12.10", features = ["log", "logging", "sync"] }
  nanoid = "0.4.0"
  ndarray = "0.16.1"
  ndarray-interp = { version = "0.5.0" }
  nonzero_ext = { version = "0.3.0", default-features = false }
  oauth2 = "5.0.0"
  o2o = "0.5.3"
  object_store = { version = "0.12.0", default-features = false }
  once_cell = "1.18.0"
  opentelemetry = { version = "0.31.0", features = ["metrics", "trace", "logs"] }
  opentelemetry-otlp = { version = "0.31.0", features = ["trace", "metrics", "logs"] }
  opentelemetry_sdk = { version = "0.31.0", features = ["trace", "metrics", "rt-tokio", "rt-tokio-current-thread"] }
  opentelemetry-appender-tracing = { version = "0.31.1" }
  opentelemetry-resource-detectors = { version = "0.10.0" }
  paste = "1.0.15"
  pbjson-build = "0.8.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"
  rand = "0.9.0"
  rand_chacha = "0.9.0"
  rand_distr = "0.5.0"
  rdkafka = "0.38.0"
  refinery = { version = "=0.8.14", default-features = false }
  reqwest = { version = "0.12.15", default-features = false }
  reqwest-retry = { version = "0.7.0", default-features = false }
  reqwest-middleware = { version = "0.4.2", default-features = false }
  rstest = "0.26.1"
  rust_decimal = "1.32.0"
  rust_decimal_macros = "1.32.0"
  rustls = { version = "0.23.12", default-features = false }
  rusty-money = "0.4.1"
  sailfish = "0.10.0"
  sealed = "0.6.0"
  secrecy = "0.8.0" # https://github.com/iqlusioninc/crates/issues/1234
  segment = { version = "0.2.3" }
  serde = { version = "1.0.189", default-features = false }
  serde-enum-str = "0.4.0"
  serde_json = "1.0.107"
  serde_path_to_error = "0.1.14"
  serde_with = "3.11.0"
  serde_qs = "0.15.0"
  serde_yaml = "0.9.30"
  sha2 = "0.10.8"
  shellexpand = "3.1.0"
  svix = { version = "1.77.0", default-features = false }
  syn = "2.0.52"
  strum = { version = "0.27", default-features = false }
  tap = "1.0.1"
  testcontainers = "0.25.0"
  thiserror = "2.0.3"
  time = "0.3.36"
  tokio = { version = "1.33.0", default-features = false }
  tokio-postgres = { version = "0.7.7", default-features = false }
  tokio-postgres-rustls = "0.13.0"
  tokio-util = "0.7.10"
  tonic = "0.14.2"
  tonic-health = "0.14.2"
  tonic-reflection = "0.14.2"
  tonic-tracing-opentelemetry = "0.32.0"
  tonic-web = "0.14.2"
  tonic-prost = "0.14.2"
  tonic-prost-build = "0.14.2"
  tower = { version = "0.5.0" }
  tower-http = { version = "0.6.1", features = ["full"] }
  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"] }
  typetag = "0.2.13"
  typst = { version = "0.13.1" }
  typst-pdf = { version = "0.13.1" }
  typst-svg = { version = "0.13.1" }
  typst-as-lib = { version = "0.14.1", features = [] }
  derive_typst_intoval = { version = "0.5.0", features = [] }
  unic-langid = "0.9"
  url = "2.5"
  uuid = "1.18"
  utoipa = { version = "5.4.0", features = ["axum_extras", "uuid", "debug", "chrono", "decimal_float"] }
  utoipa-axum = { version = "0.2.0" }
  utoipa-swagger-ui = { version = "9.0.1", features = ["axum"] }
  
  
  utoipa-redoc = { version = "6.0.0", features = ["axum"] }
  utoipa-rapidoc = { version = "6.0.0", features = ["axum"] }
  utoipa-scalar = { version = "0.3.0", features = ["axum"] }
  validator = { version = "0.20.0" }
  
  
  # 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" }
  kafka = { path = "crates/kafka" }
  metering = { path = "modules/metering" }
  diesel-models = { path = "modules/meteroid/crates/diesel-models" }
  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" }
  meteroid-oauth = { path = "modules/meteroid/crates/meteroid-oauth" }
  meteroid-seeder = { path = "modules/meteroid/crates/meteroid-seeder" }
  hubspot-client = { path = "modules/meteroid/crates/hubspot-client" }
  pennylane-client = { path = "modules/meteroid/crates/pennylane-client" }
  meteroid-tax = { path = "modules/meteroid/crates/meteroid-tax" }
  
  [patch.crates-io]
  # add patches here
  