rustango 0.38.0

Django-shaped batteries-included web framework for Rust: ORM + migrations + auto-admin + multi-tenancy + audit log + auth (sessions, JWT, OAuth2/OIDC, HMAC) + APIs (ViewSet, OpenAPI auto-derive, JSON:API) + jobs (in-mem + Postgres) + email + media (S3 / R2 / B2 / MinIO + presigned uploads + collections + tags) + production middleware (CSRF, CSP, rate-limiting, compression, idempotency, etc.).
Documentation

Build #3280182 2026-05-12 18:34:50

# rustc version rustc 1.97.0-nightly (64a965e90 2026-05-11)

# docs.rs version docsrs 0.0.0 (ad302d961e54d5d2c273ab5bb3d4139759c933ad 2026-05-03 )

# build log [INFO] running `Command { std: "docker" "create" "-v" "/home/cratesfyi/workspace-builder3/builds/rustango-0.38.0/target:/opt/rustwide/target:rw,Z" "-v" "/home/cratesfyi/workspace-builder3/builds/rustango-0.38.0/source:/opt/rustwide/workdir:ro,Z" "-v" "/home/cratesfyi/workspace-builder3/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/home/cratesfyi/workspace-builder3/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-m" "6442450944" "--cpuset-cpus" "20-25" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "sleep" "infinity", kill_on_drop: false }` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] fcb46ceb6f818179224e8b0b433eb5d4d285d550b22e2b3c410d3466f427a314 [INFO] running `Command { std: "docker" "start" "fcb46ceb6f818179224e8b0b433eb5d4d285d550b22e2b3c410d3466f427a314", kill_on_drop: false }` [INFO] running `Command { std: "docker" "exec" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "DOCS_RS=1" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "--user" "1001:1001" "fcb46ceb6f818179224e8b0b433eb5d4d285d550b22e2b3c410d3466f427a314" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "rustdoc" "--lib" "-Zrustdoc-map" "--config" "build.rustdocflags=[\"--cfg\", \"docsrs\", \"-Z\", \"unstable-options\", \"--emit=invocation-specific\", \"--resource-suffix\", \"-20260511-1.97.0-nightly-64a965e90\", \"--static-root-path\", \"/-/rustdoc.static/\", \"--cap-lints\", \"warn\", \"--extern-html-root-takes-precedence\"]" "--offline" "-Zunstable-options" "--config=doc.extern-map.registries.crates-io=\"https://docs.rs/{pkg_name}/{version}/x86_64-unknown-linux-gnu\"" "-Zrustdoc-scrape-examples" "-j6" "--target" "x86_64-unknown-linux-gnu", kill_on_drop: false }` [INFO] [stderr] warning: target filter specified, but no targets matched; this is a no-op [INFO] [stderr] Documenting rustango v0.38.0 (/opt/rustwide/workdir) [INFO] [stderr] warning: unresolved link to `tenancy::TenantPools` [INFO] [stderr] --> src/lib.rs:19:19 [INFO] [stderr] | [INFO] [stderr] 19 | //! v0.28 makes [`tenancy::TenantPools`] `Pool`-generic). Add [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ no item named `tenancy` in scope [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(rustdoc::broken_intra_doc_links)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::operator_console` [INFO] [stderr] --> src/audit.rs:135:21 [INFO] [stderr] | [INFO] [stderr] 135 | /// console's [`crate::tenancy::operator_console`] audit writes. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `emit_one_my` [INFO] [stderr] --> src/audit.rs:682:34 [INFO] [stderr] | [INFO] [stderr] 682 | /// [`emit_one`] (Postgres) or [`emit_one_my`] (MySQL). **Not [INFO] [stderr] | ^^^^^^^^^^^ no item named `emit_one_my` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Dialect::placeholder` [INFO] [stderr] --> src/audit.rs:706:20 [INFO] [stderr] | [INFO] [stderr] 706 | /// rendered via [`Dialect::placeholder`] + [`Dialect::quote_ident`]. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ no item named `Dialect` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Dialect::quote_ident` [INFO] [stderr] --> src/audit.rs:706:47 [INFO] [stderr] | [INFO] [stderr] 706 | /// rendered via [`Dialect::placeholder`] + [`Dialect::quote_ident`]. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ no item named `Dialect` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `emit_one_*` [INFO] [stderr] --> src/audit.rs:993:31 [INFO] [stderr] | [INFO] [stderr] 993 | /// falls back to a per-row [`emit_one_*`] loop inside a single [INFO] [stderr] | ^^^^^^^^^^ no item named `emit_one_*` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::sql::executor::bind_query` [INFO] [stderr] --> src/audit.rs:1209:7 [INFO] [stderr] | [INFO] [stderr] 1209 | /// [`crate::sql::executor::bind_query`] / `bind_query_my` (private [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `executor` in module `sql` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `ensure_seeded` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`ensure_seeded`] walks `inventory::iter::<ModelEntry>()` and [INFO] [stderr] ^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `ensure_seeded` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `for_model` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`for_model`] resolves a model type to its `ContentType` [INFO] [stderr] ^^^^^^^^^^^ [INFO] [stderr] = note: no item named `for_model` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `all` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`all`] / [`by_id`] / [`by_natural_key`] cover the lookup [INFO] [stderr] ^^^^^ [INFO] [stderr] = note: no item named `all` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `by_id` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`all`] / [`by_id`] / [`by_natural_key`] cover the lookup [INFO] [stderr] ^^^^^^^ [INFO] [stderr] = note: no item named `by_id` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `by_natural_key` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`all`] / [`by_id`] / [`by_natural_key`] cover the lookup [INFO] [stderr] ^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `by_natural_key` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `for_model_cached` [INFO] [stderr] --> src/contenttypes.rs:85:11 [INFO] [stderr] | [INFO] [stderr] 85 | /// [`for_model_cached`] which memoizes per-process. Returns [INFO] [stderr] | ^^^^^^^^^^^^^^^^ no item named `for_model_cached` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `FetcherPool::fetch_pool` [INFO] [stderr] --> src/contenttypes.rs:168:26 [INFO] [stderr] | [INFO] [stderr] 168 | /// Routes through [`FetcherPool::fetch_pool`] so the same call [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ no item named `FetcherPool` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `rustango::tenancy::permissions::auto_create_permissions` [INFO] [stderr] --> src/core/schema.rs:172:11 [INFO] [stderr] | [INFO] [stderr] 172 | /// [`rustango::tenancy::permissions::auto_create_permissions`]. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: public documentation for `list_dir` links to private item `validate_chain` [INFO] [stderr] --> src/migrate/file.rs:175:21 [INFO] [stderr] | [INFO] [stderr] 175 | /// validated via [`validate_chain`] — a migration declaring [INFO] [stderr] | ^^^^^^^^^^^^^^ this item is private [INFO] [stderr] | [INFO] [stderr] = note: this link will resolve properly if you pass `--document-private-items` [INFO] [stderr] = note: `#[warn(rustdoc::private_intra_doc_links)]` on by default [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `ModelScope::Tenant` [INFO] [stderr] --> src/migrate/snapshot.rs:198:44 [INFO] [stderr] | [INFO] [stderr] 198 | /// snapshot was written) default to [`ModelScope::Tenant`] — [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ no item named `ModelScope` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `from_registry` [INFO] [stderr] --> src/migrate/snapshot.rs:276:35 [INFO] [stderr] | [INFO] [stderr] 276 | /// agnostic counterpart of [`from_registry`]. Used by callers that [INFO] [stderr] | ^^^^^^^^^^^^^ no item named `from_registry` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `write_json_contains` [INFO] [stderr] --> src/sql/dialect.rs:250:22 [INFO] [stderr] | [INFO] [stderr] 250 | /// Inverse of [`write_json_contains`]: `<col> <@ <p>::jsonb` (Postgres) / [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ no item named `write_json_contains` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `write_json_has_any_keys` [INFO] [stderr] --> src/sql/dialect.rs:278:41 [INFO] [stderr] | [INFO] [stderr] 278 | /// `JsonHasAllKeys` companion of [`write_json_has_any_keys`]. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ no item named `write_json_has_any_keys` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `acquire_session_lock_sql` [INFO] [stderr] --> src/sql/dialect.rs:338:11 [INFO] [stderr] | [INFO] [stderr] 338 | /// [`acquire_session_lock_sql`]. Default `None`. Errors during [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^ no item named `acquire_session_lock_sql` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::extractors::Tenant` [INFO] [stderr] --> src/sql/executor.rs:917:7 [INFO] [stderr] | [INFO] [stderr] 917 | /// [`crate::extractors::Tenant`] rather than a single global pool. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `extractors` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `SqlError::EmptyBulkInsert` [INFO] [stderr] --> src/sql/executor.rs:1554:42 [INFO] [stderr] | [INFO] [stderr] 1554 | /// SQL-writing or driver failures, or [`SqlError::EmptyBulkInsert`] if [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `SqlError` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `SqlError::OperatorNotSupportedInDialect` [INFO] [stderr] --> src/sql/executor.rs:1947:9 [INFO] [stderr] | [INFO] [stderr] 1947 | /// - [`SqlError::OperatorNotSupportedInDialect`] from the writer when [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `SqlError` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `InsertReturningPool::MySqlAutoId` [INFO] [stderr] --> src/sql/executor.rs:1955:7 [INFO] [stderr] | [INFO] [stderr] 1955 | /// [`InsertReturningPool::MySqlAutoId`] — callers handle the two [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the enum `InsertReturningPool` has no variant or associated item named `MySqlAutoId` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Fetcher` [INFO] [stderr] --> src/sql/foreign_key.rs:275:58 [INFO] [stderr] | [INFO] [stderr] 275 | /// * Any [`ExecError`] produced by the underlying [`Fetcher`]. [INFO] [stderr] | ^^^^^^^ no item named `Fetcher` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `PoolError::MysqlNotYetImplemented` [INFO] [stderr] --> src/sql/pool.rs:111:13 [INFO] [stderr] | [INFO] [stderr] 111 | /// [`PoolError::MysqlNotYetImplemented`] in batch1, full [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the enum `PoolError` has no variant or associated item named `MysqlNotYetImplemented` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `PoolError::MysqlNotYetImplemented` [INFO] [stderr] --> src/sql/pool.rs:121:13 [INFO] [stderr] | [INFO] [stderr] 121 | /// - [`PoolError::MysqlNotYetImplemented`] — see error variant. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the enum `PoolError` has no variant or associated item named `MysqlNotYetImplemented` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `active_filter` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`active_filter`] returns `None`, [`compose_with_active`] returns [INFO] [stderr] ^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `active_filter` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `compose_with_active` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`active_filter`] returns `None`, [`compose_with_active`] returns [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `compose_with_active` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: public documentation for `admin` links to private item `urls` [INFO] [stderr] --> src/admin/mod.rs:34:9 [INFO] [stderr] | [INFO] [stderr] 34 | //! - [`urls`] — `router(pool)`, `Builder`, `Config`, `AppState` (route table). [INFO] [stderr] | ^^^^ this item is private [INFO] [stderr] | [INFO] [stderr] = note: this link will resolve properly if you pass `--document-private-items` [INFO] [stderr] [INFO] [stderr] warning: public documentation for `admin` links to private item `views` [INFO] [stderr] --> src/admin/mod.rs:35:9 [INFO] [stderr] | [INFO] [stderr] 35 | //! - [`views`] — one async fn per route; consumes the inventory registry. [INFO] [stderr] | ^^^^^ this item is private [INFO] [stderr] | [INFO] [stderr] = note: this link will resolve properly if you pass `--document-private-items` [INFO] [stderr] [INFO] [stderr] warning: public documentation for `admin` links to private item `helpers` [INFO] [stderr] --> src/admin/mod.rs:36:9 [INFO] [stderr] | [INFO] [stderr] 36 | //! - [`helpers`] — model lookup, FK joins, render_cell, render_form, pager. [INFO] [stderr] | ^^^^^^^ this item is private [INFO] [stderr] | [INFO] [stderr] = note: this link will resolve properly if you pass `--document-private-items` [INFO] [stderr] [INFO] [stderr] warning: public documentation for `admin` links to private item `templates` [INFO] [stderr] --> src/admin/mod.rs:37:9 [INFO] [stderr] | [INFO] [stderr] 37 | //! - [`templates`] — bundled Tera registry + render entry-point. [INFO] [stderr] | ^^^^^^^^^ this item is private [INFO] [stderr] | [INFO] [stderr] = note: this link will resolve properly if you pass `--document-private-items` [INFO] [stderr] [INFO] [stderr] warning: public documentation for `admin` links to private item `errors` [INFO] [stderr] --> src/admin/mod.rs:38:9 [INFO] [stderr] | [INFO] [stderr] 38 | //! - [`errors`] — `AdminError` and its `IntoResponse` impl. [INFO] [stderr] | ^^^^^^ this item is private [INFO] [stderr] | [INFO] [stderr] = note: this link will resolve properly if you pass `--document-private-items` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `AdminAction` [INFO] [stderr] --> src/admin/urls.rs:20:29 [INFO] [stderr] | [INFO] [stderr] 20 | /// Future returned by an [`AdminAction`] handler. [INFO] [stderr] | ^^^^^^^^^^^ no item named `AdminAction` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::RouteConfig::audit_url` [INFO] [stderr] --> src/admin/urls.rs:311:11 [INFO] [stderr] | [INFO] [stderr] 311 | /// [`crate::tenancy::RouteConfig::audit_url`] (which since [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::RouteConfig::static_url` [INFO] [stderr] --> src/admin/urls.rs:326:16 [INFO] [stderr] | [INFO] [stderr] 326 | /// from [`crate::tenancy::RouteConfig::static_url`] — [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::RouteConfig::change_password_url` [INFO] [stderr] --> src/admin/urls.rs:340:11 [INFO] [stderr] | [INFO] [stderr] 340 | /// [`crate::tenancy::RouteConfig::change_password_url`]. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `SecurityHeadersLayer` [INFO] [stderr] --> src/config/sections.rs:402:15 [INFO] [stderr] | [INFO] [stderr] 402 | /// the [`SecurityHeadersLayer`] preset. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^ no item named `SecurityHeadersLayer` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Model` [INFO] [stderr] --> src/forms/mod.rs:9:29 [INFO] [stderr] | [INFO] [stderr] 9 | //! | [`ModelForm`] | Any [`Model`] table — parse + validate + save without a dedicated struct | [INFO] [stderr] | ^^^^^ no item named `Model` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Layer` [INFO] [stderr] --> src/forms/csrf.rs:63:45 [INFO] [stderr] | [INFO] [stderr] 63 | /// Create the CSRF middleware as a tower [`Layer`]. [INFO] [stderr] | ^^^^^ no item named `Layer` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Layer` [INFO] [stderr] --> src/forms/csrf.rs:103:17 [INFO] [stderr] | [INFO] [stderr] 103 | /// The tower [`Layer`] implementation. Wraps inner services with [INFO] [stderr] | ^^^^^ no item named `Layer` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Model` [INFO] [stderr] --> src/forms/mod.rs:377:56 [INFO] [stderr] | [INFO] [stderr] 377 | /// Schema-driven form that can insert or update any [`Model`] row. [INFO] [stderr] | ^^^^^ no item named `Model` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `NullCache` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`NullCache`] | `cache` | No-op; all reads return `None`. Good for tests. | [INFO] [stderr] ^^^^^^^^^^^ [INFO] [stderr] = note: no item named `NullCache` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `InMemoryCache` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`InMemoryCache`] | `cache` | Per-process HashMap with TTL. Zero external deps. | [INFO] [stderr] ^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `InMemoryCache` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `redis_backend::RedisCache` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`RedisCache`](redis_backend::RedisCache) | `cache-redis` | Redis-backed via async connection manager. | [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `redis_backend` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `BoxedCache` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Use [`BoxedCache`] as a convenient alias. [INFO] [stderr] ^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `BoxedCache` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `redis_backend::RedisCache` [INFO] [stderr] --> src/cache/mod.rs:122:21 [INFO] [stderr] | [INFO] [stderr] 122 | /// - `"redis"` → [`redis_backend::RedisCache`] (requires [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `redis_backend` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Cache` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] sliding-window counter on top of the same [`Cache`] trait. [INFO] [stderr] ^^^^^^^ [INFO] [stderr] = note: no item named `Cache` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `HealthRouter::check` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Add additional checks (Redis, S3, external APIs) via [`HealthRouter::check`]: [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `HealthRouter` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `HealthRouter::cache_probe` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`HealthRouter::cache_probe`] — `Cache::set`/`get` round-trip [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `HealthRouter` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `HealthRouter::http_probe` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`HealthRouter::http_probe`] — GET a URL, checking it returns 2xx [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `HealthRouter` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `HealthRouter::tcp_probe` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`HealthRouter::tcp_probe`] — open a TCP connection. Always [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `HealthRouter` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `HttpClient` [INFO] [stderr] --> src/health.rs:215:45 [INFO] [stderr] | [INFO] [stderr] 215 | /// Built-in probe — issues a GET via [`HttpClient`] and checks the [INFO] [stderr] | ^^^^^^^^^^ no item named `HttpClient` in scope [INFO] [stderr] | [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `ConsoleMailer` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`ConsoleMailer`] | Development — prints emails to stdout. Default. | [INFO] [stderr] ^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `ConsoleMailer` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `InMemoryMailer` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`InMemoryMailer`] | Tests — captures emails into a `Vec` for assertions. | [INFO] [stderr] ^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `InMemoryMailer` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `SmtpMailer` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`SmtpMailer`] | Production — connects to an SMTP relay. (Future slice — currently a stub.) | [INFO] [stderr] ^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `SmtpMailer` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Email` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - The full [`Email`] (subject, bodies, recipients, headers) is [INFO] [stderr] ^^^^^^^ [INFO] [stderr] = note: no item named `Email` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `sign_request` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Use [`sign_request`] to build the `Authorization` header value [INFO] [stderr] ^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `sign_request` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::jwt_lifecycle` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Standalone alternative to [`crate::tenancy::jwt_lifecycle`] (which [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Self::ensure_table_pool` [INFO] [stderr] --> src/media/collection.rs:13:7 [INFO] [stderr] | [INFO] [stderr] 13 | //! [`Self::ensure_table_pool`] + per-backend row decoders. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ no item named `ensure_table_pool` in module `collection` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Self::ensure_table_pool` [INFO] [stderr] --> src/media/tag.rs:11:31 [INFO] [stderr] | [INFO] [stderr] 11 | //! v0.38 — tri-dialect via [`Self::ensure_table_pool`] + per-backend [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ no item named `ensure_table_pool` in module `tag` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Self::from_row` [INFO] [stderr] --> src/media/tag.rs:12:7 [INFO] [stderr] | [INFO] [stderr] 12 | //! [`Self::from_row`] dispatch. The PG-only `ensure_table(&PgPool)` [INFO] [stderr] | ^^^^^^^^^^^^^^ no item named `from_row` in module `tag` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `NotificationDispatch` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] 2. You impl `Notification<User>` for it, returning a [`NotificationDispatch`] [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `NotificationDispatch` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `NotificationResult` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] database / log delivery. The returned [`NotificationResult`] reports [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `NotificationResult` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `InMemoryJobQueue` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`InMemoryJobQueue`] | Single-process apps, dev, tests. Jobs lost on restart. | [INFO] [stderr] ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `InMemoryJobQueue` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `PasswordReset::issue` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] 1. User requests a reset → call [`PasswordReset::issue`] with their [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `PasswordReset` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `PasswordReset::verify` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`PasswordReset::verify`] → if Ok, render the "set new password" form. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `PasswordReset` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `EmailVerification` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Same pattern with [`EmailVerification`] — issue the URL after signup, [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `EmailVerification` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `LocalStorage` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`LocalStorage`] | Single-server deployments — files on local disk | [INFO] [stderr] ^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `LocalStorage` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `InMemoryStorage` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`InMemoryStorage`] | Tests — files in a `HashMap`, never touch disk | [INFO] [stderr] ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `InMemoryStorage` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `s3::S3Storage` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`s3::S3Storage`] | AWS S3, Cloudflare R2, Backblaze B2, MinIO — any S3-compatible API. Behind the `storage-s3` feature. | [INFO] [stderr] ^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `s3` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `EnvSecrets` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`EnvSecrets`] | Reads from environment variables (with optional prefix) | [INFO] [stderr] ^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `EnvSecrets` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `InMemorySecrets` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`InMemorySecrets`] | Tests — secrets in a HashMap | [INFO] [stderr] ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `InMemorySecrets` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `RequestId` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`RequestId`] axum extractor so handlers can include it in log events. [INFO] [stderr] ^^^^^^^^^^^ [INFO] [stderr] = note: no item named `RequestId` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `RequestIdLayer::always_generate` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] a fresh one with [`RequestIdLayer::always_generate`]. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `RequestIdLayer` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `RealIp` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] request extensions as a [`RealIp`] value. [INFO] [stderr] ^^^^^^^^ [INFO] [stderr] = note: no item named `RealIp` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `IdempotencyLayer::cache_status_codes` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`IdempotencyLayer::cache_status_codes`]. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `IdempotencyLayer` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `IdempotencyLayer::scope` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`IdempotencyLayer::scope`] when you have multiple endpoints whose [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `IdempotencyLayer` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `StaticFiles::no_canonicalize` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] with [`StaticFiles::no_canonicalize`] if you intentionally [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `StaticFiles` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `StaticFiles::serve_hidden` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] default — toggle via [`StaticFiles::serve_hidden`]. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `StaticFiles` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `StaticFiles::cache_control` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Override with [`StaticFiles::cache_control`]. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `StaticFiles` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `ProblemDetails::with_extension` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] standard ones. Add them with [`ProblemDetails::with_extension`]: [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `ProblemDetails` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::cache::RedisCache` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Pair with [`crate::cache::RedisCache`] for cross-replica visibility. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `RedisCache` in module `cache` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `FeatureFlags::ttl` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] with [`FeatureFlags::ttl`]. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `FeatureFlags` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `http.method` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] ([`http.method`], [`http.status_code`]) that pre-date the current [INFO] [stderr] ^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `http.method` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `http.status_code` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] ([`http.method`], [`http.status_code`]) that pre-date the current [INFO] [stderr] ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `http.status_code` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `SignatureFormat` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] chosen [`SignatureFormat`]). [INFO] [stderr] ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `SignatureFormat` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `WebhookSubscription::header` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - Any extra headers added via [`WebhookSubscription::header`]. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `WebhookSubscription` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `WebhookSubscription::retry_status_codes` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Customize per-subscription with [`WebhookSubscription::retry_status_codes`]. [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `WebhookSubscription` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::auth_backends` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] table + `ApiKeyBackend`), see [`crate::tenancy::auth_backends`]. This [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::password` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`crate::tenancy::password`]. This module is the lower-level standalone [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `SecurityHeadersLayer::strict` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`SecurityHeadersLayer::strict`] — production: HSTS 1y + preload, XFO=DENY, [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `SecurityHeadersLayer` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `SecurityHeadersLayer::relaxed` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`SecurityHeadersLayer::relaxed`] — embeddable: HSTS 1y, XFO=SAMEORIGIN, [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `SecurityHeadersLayer` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `SecurityHeadersLayer::dev` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] - [`SecurityHeadersLayer::dev`] — local: nosniff only (HSTS would lock you to https forever) [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `SecurityHeadersLayer` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `CSP_NONCE_PLACEHOLDER` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] header. If it contains the literal string [`CSP_NONCE_PLACEHOLDER`] [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `CSP_NONCE_PLACEHOLDER` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `EventBus` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] WebSocket handler scaffold — fan-out via the SSE [`EventBus`]. [INFO] [stderr] ^^^^^^^^^^ [INFO] [stderr] = note: no item named `EventBus` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `OAuth2Provider` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`OAuth2Provider`] handles **both** pure OAuth2 (GitHub, Discord, Slack) [INFO] [stderr] ^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `OAuth2Provider` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `OAuth2Registry` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`OAuth2Registry`] maps `(tenant_id, provider_name)` to a configured [INFO] [stderr] ^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `OAuth2Registry` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `OAuth2Provider` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`OAuth2Provider`]. Build it from config at startup, OR back it with the [INFO] [stderr] ^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `OAuth2Provider` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `OAuth2Provider::from_discovery` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`OAuth2Provider::from_discovery`] fetches `.well-known/openid-configuration` [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `OAuth2Provider` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `HttpClient` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`HttpClient`] when you want consistent retry + timeout behavior [INFO] [stderr] ^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `HttpClient` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `RequestBuilder::send_with_retry` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`RequestBuilder::send_with_retry`] (the call must be idempotent) [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `RequestBuilder` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `OpenApiSpec::new` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] 1. **Hand-build** the spec with [`OpenApiSpec::new`] + the `add_*` [INFO] [stderr] ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `OpenApiSpec` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Schema::for_serializer` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] 2. **Generate** from [`Schema::for_serializer`] (when the [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `Schema` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `viewset` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`viewset`] for the JSON/API side. See [`template_views`] for [INFO] [stderr] ^^^^^^^^^ [INFO] [stderr] = note: no item named `viewset` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::viewset` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Sibling of [`crate::viewset`] for the JSON/API side. Each view is a [INFO] [stderr] ^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `viewset` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `ListView` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`ListView`] | Paginated list — `?page=N` query param | `<table>_list.html` | [INFO] [stderr] ^^^^^^^^^^ [INFO] [stderr] = note: no item named `ListView` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `DetailView` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`DetailView`] | Single row by primary key — `/{pk}` | `<table>_detail.html` | [INFO] [stderr] ^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `DetailView` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `CreateView` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`CreateView`] | GET empty form / POST insert / 303 to `success_url` | `<table>_form.html` | [INFO] [stderr] ^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `CreateView` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `UpdateView` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`UpdateView`] | GET prefilled form / POST update / 303 | `<table>_form.html` | [INFO] [stderr] ^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `UpdateView` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `DeleteView` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] | [`DeleteView`] | GET confirm / POST delete / 303 | `<table>_confirm_delete.html` | [INFO] [stderr] ^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `DeleteView` in scope [INFO] [stderr] = help: to escape `[` and `]` characters, add '\' before them like `\[` or `\]` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::extractors::Tenant` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] [`crate::extractors::Tenant`] extractor. Mirrors [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `extractors` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `ListView::tenant_action` [INFO] [stderr] --> src/template_views.rs:118:7 [INFO] [stderr] | [INFO] [stderr] 118 | /// [`ListView::tenant_action`] (per-request tenant connection). [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ the struct `ListView` has no field or associated item named `tenant_action` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Self::tenant_action` [INFO] [stderr] --> src/template_views.rs:327:11 [INFO] [stderr] | [INFO] [stderr] 327 | /// [`Self::tenant_action`]. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ the struct `ListView` has no field or associated item named `tenant_action` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Self::tenant_action` [INFO] [stderr] --> src/template_views.rs:384:15 [INFO] [stderr] | [INFO] [stderr] 384 | /// Use [`Self::tenant_action`] inside tenancy projects. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ the struct `ListView` has no field or associated item named `tenant_action` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Self::tenant_action` [INFO] [stderr] --> src/template_views.rs:427:11 [INFO] [stderr] | [INFO] [stderr] 427 | /// [`Self::tenant_action`] are NOT gated by this flag — [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ the struct `ListView` has no field or associated item named `tenant_action` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Self::tenant_router` [INFO] [stderr] --> src/template_views.rs:495:47 [INFO] [stderr] | [INFO] [stderr] 495 | /// same pool. For tenancy projects use [`Self::tenant_router`]. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^ the struct `ListView` has no field or associated item named `tenant_router` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `server::Builder` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] Django-style runserver — [`server::Builder`] owns every line of [INFO] [stderr] ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `Builder` in module `server` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `server::Builder` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] The full multi-tenant [`server::Builder`] is gated inside the [INFO] [stderr] ^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `Builder` in module `server` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::manage::run` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] (or [`crate::tenancy::manage::run`] when [`Cli::tenancy`] is on). [INFO] [stderr] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `Cli::tenancy` [INFO] [stderr] | [INFO] [stderr] = note: the link appears in this line: [INFO] [stderr] [INFO] [stderr] (or [`crate::tenancy::manage::run`] when [`Cli::tenancy`] is on). [INFO] [stderr] ^^^^^^^^^^^^^^ [INFO] [stderr] = note: no item named `Cli` in scope [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::tenancy::manage::run` [INFO] [stderr] --> src/manage.rs:451:11 [INFO] [stderr] | [INFO] [stderr] 451 | /// [`crate::tenancy::manage::run`] handles `create-tenant`, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ no item named `tenancy` in module `rustango` [INFO] [stderr] [INFO] [stderr] warning: unresolved link to `crate::server::Builder` [INFO] [stderr] --> src/manage.rs:454:11 [INFO] [stderr] | [INFO] [stderr] 454 | /// [`crate::server::Builder`]. [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^ no item named `Builder` in module `server` [INFO] [stderr] [INFO] [stderr] warning: unclosed HTML tag `T` [INFO] [stderr] --> src/sql/executor.rs:2085:36 [INFO] [stderr] | [INFO] [stderr] 2085 | /// layer in batch6 will route Auto<T>-bearing models to a different [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] = note: `#[warn(rustdoc::invalid_html_tags)]` on by default [INFO] [stderr] help: try marking as source code [INFO] [stderr] | [INFO] [stderr] 2085 | /// layer in batch6 will route `Auto<T>`-bearing models to a different [INFO] [stderr] | + + [INFO] [stderr] [INFO] [stderr] warning: unclosed HTML tag `T` [INFO] [stderr] --> src/forms/mod.rs:922:26 [INFO] [stderr] | [INFO] [stderr] 922 | /// schema (sans Auto<T> PK on create). [INFO] [stderr] | ^^^ [INFO] [stderr] | [INFO] [stderr] help: try marking as source code [INFO] [stderr] | [INFO] [stderr] 922 | /// schema (sans `Auto<T>` PK on create). [INFO] [stderr] | + + [INFO] [stderr] [INFO] [stderr] warning: unclosed HTML tag `Postgres` [INFO] [stderr] [INFO] [stderr] warning: unclosed HTML tag `DB` [INFO] [stderr] [INFO] [stderr] warning: `rustango` (lib doc) generated 129 warnings [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 4.36s [INFO] [stderr] Generated /opt/rustwide/target/x86_64-unknown-linux-gnu/doc/rustango/index.html [INFO] running `Command { std: "docker" "stop" "-t" "1" "fcb46ceb6f818179224e8b0b433eb5d4d285d550b22e2b3c410d3466f427a314", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "fcb46ceb6f818179224e8b0b433eb5d4d285d550b22e2b3c410d3466f427a314", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "fcb46ceb6f818179224e8b0b433eb5d4d285d550b22e2b3c410d3466f427a314", kill_on_drop: false }` [INFO] [stdout] fcb46ceb6f818179224e8b0b433eb5d4d285d550b22e2b3c410d3466f427a314