tideway 0.7.17

A batteries-included Rust web framework built on Axum for building SaaS applications quickly
Documentation
# Advanced Composition

This page documents advanced alternatives to the canonical Tideway onboarding style.

Canonical onboarding style:
- Define modules with `module!`.
- Register modules with `App::register_module(...)`.
- Use `tideway new` + `tideway dev --fix-env` + `tideway resource ... --wire ...`.

## Grouped Route Syntax

You can group multiple methods for one path in `module!`:

```rust
tideway::module!(
    UsersModule,
    prefix = "/api",
    routes = [
        ("/users", get => list_users, post => create_user),
    ]
);
```

## Mixed Module Registration

For mixed module types, use `register_modules!`:

```rust
let app = tideway::register_modules!(
    App::new(),
    routes::ApiModule,
    users::UsersModule,
);
```

## Optional Module Registration

For optional modules in mixed lists:

```rust
let app = tideway::register_modules!(
    App::new(),
    routes::ApiModule;
    optional: optional_module
);
```

For optional-only module registration:

```rust
let app = tideway::register_optional_modules!(
    App::new(),
    optional_module
);
```

## Homogeneous Module Iterators

When modules share one concrete type:

```rust
let app = App::new().register_modules(modules);
```

## Notes

- These patterns are stable and supported.
- They are marked advanced because they are not required for first-run productivity.
- For API contracts, see `docs/module_contracts.md`.