# {{project_name}}

A basic HTTP server built with [Theater](https://github.com/colinrozzi/theater) WebAssembly actors.

## 🚀 Quick Start

### Prerequisites

- [Rust](https://rustup.rs/) (1.81.0 or newer)
- [Theater CLI](https://github.com/colinrozzi/theater) installed
- `cargo component` installed (`cargo install cargo-component`)

### Running the Server

```bash
# Build the WebAssembly component
cargo component build --release

# Start the server
theater spawn manifest.toml
```

The server will start on **http://localhost:8080**

### Available Endpoints

- `GET /` - Welcome page with server information
- `GET /health` - JSON health check response

## 🏗️ Project Structure

```
{{project_name}}/
├── src/
│   └── lib.rs              # HTTP server implementation
├── wit/
│   ├── world.wit          # WebAssembly Interface Types definitions
│   └── deps/              # Theater framework dependencies
├── Cargo.toml             # Rust dependencies
├── manifest.toml          # Theater actor configuration
└── README.md             # This file
```

## 🔧 Development

### Adding New Routes

To add new endpoints, modify the `handle_request` function in `src/lib.rs`:

```rust
let response = match (request.method.as_str(), request.uri.as_str()) {
    ("GET", "/") => generate_welcome_response(),
    ("GET", "/health") => generate_health_response(),
    ("GET", "/api/users") => generate_users_response(),  // Add new route
    _ => generate_404_response(),
};
```

Then implement your response function:

```rust
fn generate_users_response() -> HttpResponse {
    let json_body = r#"{"users":["alice","bob"]}"#;
    HttpResponse {
        status: 200,
        headers: vec![("Content-Type".to_string(), "application/json".to_string())],
        body: Some(json_body.as_bytes().to_vec()),
    }
}
```

### Building and Testing

```bash
# Build the component
cargo component build --release

# Start the server
theater spawn manifest.toml

# Test the endpoints
curl http://localhost:8080/
curl http://localhost:8080/health
```

### Monitoring the Actor

```bash
# List running actors
theater list

# Inspect the actor (get the actor ID from theater list)
theater inspect <actor-id>

# View actor events
theater events <actor-id>

# Stop the actor
theater stop <actor-id>
```

## 🎯 Next Steps

This template provides a foundation for building HTTP APIs and web applications. Consider adding:

- **Database integration** - Connect to databases using Theater's capabilities
- **Authentication** - Add middleware for API authentication
- **WebSocket support** - Enable real-time features
- **File serving** - Serve static files using Theater's filesystem handlers
- **Request validation** - Add input validation and error handling
- **Logging** - Enhanced request/response logging
- **CORS** - Cross-origin resource sharing support

## 📚 Learn More

- [Theater Documentation](https://github.com/colinrozzi/theater)
- [WebAssembly Component Model](https://github.com/WebAssembly/component-model)
- [WIT (WebAssembly Interface Types)](https://github.com/WebAssembly/wit-bindgen)

## 🤝 Contributing

Feel free to extend this template and share your improvements!

---

*Built with ❤️ using Theater WebAssembly actors*
