content: [workspace]
  default-members = ["crates/cli"]
  members = ["crates/*"]
  resolver = "2"
  
  # Updated in the CI with a `sed` command
  package.version = "0.11.0"
  
  package.license = "Apache-2.0"
  package.authors = ["Quentin Gliech <quenting@element.io>"]
  package.edition = "2021"
  package.homepage = "https://matrix-org.github.io/matrix-authentication-service/"
  package.repository = "https://github.com/matrix-org/matrix-authentication-service/"
  
  [workspace.lints.rust]
  unsafe_code = "forbid"
  
  [workspace.lints.clippy]
  # We use groups as good defaults, but with a lower priority so that we can override them
  all = { level = "deny", priority = -1 }
  pedantic = { level = "warn", priority = -1 }
  
  str_to_string = "deny"
  
  [workspace.lints.rustdoc]
  broken_intra_doc_links = "deny"
  
  [workspace.dependencies]
  
  # Workspace crates
  mas-axum-utils = { path = "./crates/axum-utils/", version = "=0.11.0" }
  mas-cli = { path = "./crates/cli/", version = "=0.11.0" }
  mas-config = { path = "./crates/config/", version = "=0.11.0" }
  mas-data-model = { path = "./crates/data-model/", version = "=0.11.0" }
  mas-email = { path = "./crates/email/", version = "=0.11.0" }
  mas-graphql = { path = "./crates/graphql/", version = "=0.11.0" }
  mas-handlers = { path = "./crates/handlers/", version = "=0.11.0" }
  mas-http = { path = "./crates/http/", version = "=0.11.0" }
  mas-i18n = { path = "./crates/i18n/", version = "=0.11.0" }
  mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=0.11.0" }
  mas-iana = { path = "./crates/iana/", version = "=0.11.0" }
  mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=0.11.0" }
  mas-jose = { path = "./crates/jose/", version = "=0.11.0" }
  mas-keystore = { path = "./crates/keystore/", version = "=0.11.0" }
  mas-listener = { path = "./crates/listener/", version = "=0.11.0" }
  mas-matrix = { path = "./crates/matrix/", version = "=0.11.0" }
  mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=0.11.0" }
  mas-oidc-client = { path = "./crates/oidc-client/", version = "=0.11.0" }
  mas-policy = { path = "./crates/policy/", version = "=0.11.0" }
  mas-router = { path = "./crates/router/", version = "=0.11.0" }
  mas-spa = { path = "./crates/spa/", version = "=0.11.0" }
  mas-storage = { path = "./crates/storage/", version = "=0.11.0" }
  mas-storage-pg = { path = "./crates/storage-pg/", version = "=0.11.0" }
  mas-tasks = { path = "./crates/tasks/", version = "=0.11.0" }
  mas-templates = { path = "./crates/templates/", version = "=0.11.0" }
  mas-tower = { path = "./crates/tower/", version = "=0.11.0" }
  oauth2-types = { path = "./crates/oauth2-types/", version = "=0.11.0" }
  
  # OpenAPI schema generation and validation
  [workspace.dependencies.aide]
  version = "0.13.4"
  features = ["axum", "axum-headers", "macros"]
  
  # GraphQL server
  [workspace.dependencies.async-graphql]
  version = "7.0.9"
  features = ["chrono", "url", "tracing"]
  
  # Utility to write and implement async traits
  [workspace.dependencies.async-trait]
  version = "0.1.82"
  
  # High-level error handling
  [workspace.dependencies.anyhow]
  version = "1.0.86"
  
  # HTTP router
  [workspace.dependencies.axum]
  version = "0.7.5"
  
  # Extra utilities for Axum
  [workspace.dependencies.axum-extra]
  version = "0.9.3"
  features = ["cookie-private", "cookie-key-expansion", "typed-header"]
  
  # Bytes
  [workspace.dependencies.bytes]
  version = "1.7.1"
  
  # UTF-8 paths
  [workspace.dependencies.camino]
  version = "1.1.9"
  
  # Time utilities
  [workspace.dependencies.chrono]
  version = "0.4.38"
  default-features = false
  features = ["serde", "clock"]
  
  # CLI argument parsing
  [workspace.dependencies.clap]
  version = "4.5.16"
  features = ["derive"]
  
  # Configuration loading
  [workspace.dependencies.figment]
  version = "0.10.19"
  features = ["env", "yaml", "test"]
  
  # Rate-limiting
  [workspace.dependencies.governor]
  version = "0.6.3"
  
  # HTTP headers
  [workspace.dependencies.headers]
  version = "0.4.0"
  
  # HTTP request/response
  [workspace.dependencies.http]
  version = "1.1.0"
  
  # HTTP body trait
  [workspace.dependencies.http-body]
  version = "1.0.0"
  
  # http-body utilities
  [workspace.dependencies.http-body-util]
  version = "0.1.2"
  
  # HTTP client and server
  [workspace.dependencies.hyper]
  version = "1.4.1"
  features = ["client", "http1", "http2"]
  
  # Additional Hyper utilties
  [workspace.dependencies.hyper-util]
  version = "0.1.7"
  features = [
      "client",
      "server",
      "server-auto",
      "service",
      "http1",
      "http2",
      "tokio",
  ]
  
  # Hyper Rustls support
  [workspace.dependencies.hyper-rustls]
  version = "0.27.2"
  features = ["http1", "http2"]
  default-features = false
  
  # Snapshot testing
  [workspace.dependencies.insta]
  version = "1.39.0"
  features = ["yaml", "json"]
  
  # Email sending
  [workspace.dependencies.lettre]
  version = "0.11.7"
  default-features = false
  features = [
      "tokio1-rustls-tls",
      "hostname",
      "builder",
      "tracing",
      "pool",
      "smtp-transport",
      "sendmail-transport",
  ]
  
  # Templates
  [workspace.dependencies.minijinja]
  version = "2.2.0"
  
  # Utilities to deal with non-zero values
  [workspace.dependencies.nonzero_ext]
  version = "0.3.0"
  
  # Random values
  [workspace.dependencies.rand]
  version = "0.8.5"
  
  # TLS stack
  [workspace.dependencies.rustls]
  version = "0.23.12"
  
  # Use platform-specific verifier for TLS
  [workspace.dependencies.rustls-platform-verifier]
  version = "0.3.4"
  
  # JSON Schema generation
  [workspace.dependencies.schemars]
  version = "0.8.21"
  features = ["url", "chrono", "preserve_order"]
  
  # Query builder
  [workspace.dependencies.sea-query]
  version = "0.32.0-rc.1"
  features = ["derive", "attr", "with-uuid", "with-chrono", "postgres-array"]
  
  # Query builder
  [workspace.dependencies.sea-query-binder]
  version = "0.7.0-rc.1"
  features = [
      "sqlx",
      "sqlx-postgres",
      "with-uuid",
      "with-chrono",
      "postgres-array",
  ]
  
  # Sentry error tracking
  [workspace.dependencies.sentry]
  version = "0.34.0"
  default-features = false
  features = ["backtrace", "contexts", "panic", "tower"]
  
  # Sentry tower layer
  [workspace.dependencies.sentry-tower]
  version = "0.34.0"
  features = ["http"]
  
  # Sentry tracing integration
  [workspace.dependencies.sentry-tracing]
  version = "0.34.0"
  
  # Serialization and deserialization
  [workspace.dependencies.serde]
  version = "1.0.209"
  features = ["derive"] # Most of the time, if we need serde, we need derive
  
  # JSON serialization and deserialization
  [workspace.dependencies.serde_json]
  version = "1.0.127"
  features = ["preserve_order"]
  
  # SQL database support
  [workspace.dependencies.sqlx]
  version = "0.8.1"
  features = [
      "runtime-tokio",
      "tls-rustls-aws-lc-rs",
      "postgres",
      "migrate",
      "chrono",
      "json",
      "uuid",
      "ipnetwork",
  ]
  
  # Custom error types
  [workspace.dependencies.thiserror]
  version = "1.0.63"
  
  # Async runtime
  [workspace.dependencies.tokio]
  version = "1.40.0"
  features = ["full"]
  
  # Tower services
  [workspace.dependencies.tower]
  version = "0.4.13"
  features = ["util"]
  
  # Tower HTTP layers
  [workspace.dependencies.tower-http]
  version = "0.5.2"
  features = ["cors", "fs", "add-extension"]
  
  # Logging and tracing
  [workspace.dependencies.tracing]
  version = "0.1.40"
  [workspace.dependencies.tracing-subscriber]
  version = "0.3.18"
  
  # OpenTelemetry
  [workspace.dependencies.opentelemetry]
  version = "0.24.0"
  features = ["trace", "metrics"]
  [workspace.dependencies.opentelemetry-http]
  version = "0.13.0"
  features = ["hyper"]
  [workspace.dependencies.opentelemetry-semantic-conventions]
  version = "0.16.0"
  [workspace.dependencies.tracing-opentelemetry]
  version = "0.25.0"
  default-features = false
  
  # URL manipulation
  [workspace.dependencies.url]
  version = "2.5.2"
  features = ["serde"]
  
  # ULID support
  [workspace.dependencies.ulid]
  version = "1.1.3"
  features = ["serde"]
  
  # A few profile opt-level tweaks to make the test suite run faster
  [profile.dev.package]
  num-bigint-dig.opt-level = 3
  sqlx-macros.opt-level = 3
  cranelift-codegen.opt-level = 3
  regalloc2.opt-level = 3
  argon2.opt-level = 3
  pbkdf2.opt-level = 3
  bcrypt.opt-level = 3
  sha2.opt-level = 3
  digest.opt-level = 3
  block-buffer.opt-level = 3
  generic-array.opt-level = 3
  
  [patch.crates-io]
  # Waiting for https://github.com/SeaQL/sea-query/pull/810
  sea-query = { git = "https://github.com/sandhose/sea-query", branch = "binder/relax-sqlx-dependency" }
  sea-query-binder = { git = "https://github.com/sandhose/sea-query", branch = "binder/relax-sqlx-dependency" }
  