# joes51/tcp-http-server-rust architecture

> Architecture diagram of the GitHub repository joes51/tcp-http-server-rust, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-11-09). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/joes51/tcp-http-server-rust
- Repository: https://github.com/joes51/tcp-http-server-rust

## Overview

This is a small Rust HTTP/1.1 server. In the documented runtime, an HTTP client connects to the `httpserver` binary; its `Server` accepts a TCP stream, parses a request, dispatches a handler, then writes a status line, headers, and body. The parser handles request lines, headers, and Content-Length bodies; response formatting is a separate layer. `src/main.rs` is an alternate parse-and-print TCP program. The `Body` type is present but its append operation is unfinished and is not used by the request parser. Edges reflect the shown calls or README; other binaries are not part of the documented server workflow.

Main entry points: [`src/bin/server.rs`](https://github.com/joes51/tcp-http-server-rust/blob/main/src/bin/server.rs) (TCP server), [`src/request.rs`](https://github.com/joes51/tcp-http-server-rust/blob/main/src/request.rs) (Request parser), [`src/bin/httpserver.rs`](https://github.com/joes51/tcp-http-server-rust/blob/main/src/bin/httpserver.rs) (HTTP entrypoint), [`src/response.rs`](https://github.com/joes51/tcp-http-server-rust/blob/main/src/response.rs) (Response writer)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_runtime["Server runtime"]
  node_httpserver["HTTP entrypoint<br/>[httpserver.rs]"]
  node_server["TCP server<br/>[server.rs]"]
  node_handler["Path handler<br/>[httpserver.rs]"]
  node_debug_tcp["Parse-and-print TCP<br/>[main.rs]"]
end

subgraph group_protocol["HTTP protocol"]
  node_request["Request parser<br/>[request.rs]"]
  node_headers["Header parsing<br/>[headers.rs]"]
  node_body["Body abstraction<br/>[body.rs]"]
end

subgraph group_response["Response formatting"]
  node_response["Response writer<br/>[response.rs]"]
end

node_client(("HTTP client"))

node_client -->|"sends request"| node_httpserver
node_httpserver -->|"starts server"| node_server
node_server -->|"parses stream"| node_request
node_server -->|"dispatches request"| node_handler
node_handler -->|"returns body or error"| node_server
node_request -->|"parses and reads"| node_headers
node_server -->|"writes status and headers"| node_response
node_response -->|"builds default headers"| node_headers
node_server -->|"writes response"| node_client
node_debug_tcp -->|"parses stream"| node_request

click node_httpserver "https://github.com/joes51/tcp-http-server-rust/blob/main/src/bin/httpserver.rs"
click node_server "https://github.com/joes51/tcp-http-server-rust/blob/main/src/bin/server.rs"
click node_handler "https://github.com/joes51/tcp-http-server-rust/blob/main/src/bin/httpserver.rs"
click node_request "https://github.com/joes51/tcp-http-server-rust/blob/main/src/request.rs"
click node_headers "https://github.com/joes51/tcp-http-server-rust/blob/main/src/headers.rs"
click node_body "https://github.com/joes51/tcp-http-server-rust/blob/main/src/body.rs"
click node_response "https://github.com/joes51/tcp-http-server-rust/blob/main/src/response.rs"
click node_debug_tcp "https://github.com/joes51/tcp-http-server-rust/blob/main/src/main.rs"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_httpserver,node_server,node_handler,node_debug_tcp,node_client toneBlue
class node_request,node_headers,node_body toneAmber
class node_response toneMint
```

## Components

### Server runtime

- [HTTP entrypoint](https://github.com/joes51/tcp-http-server-rust/blob/main/src/bin/httpserver.rs): `src/bin/httpserver.rs`
- [TCP server](https://github.com/joes51/tcp-http-server-rust/blob/main/src/bin/server.rs): `src/bin/server.rs`
- [Path handler](https://github.com/joes51/tcp-http-server-rust/blob/main/src/bin/httpserver.rs): `src/bin/httpserver.rs`
- [Parse-and-print TCP](https://github.com/joes51/tcp-http-server-rust/blob/main/src/main.rs): `src/main.rs`

### HTTP protocol

- [Request parser](https://github.com/joes51/tcp-http-server-rust/blob/main/src/request.rs): `src/request.rs`
- [Header parsing](https://github.com/joes51/tcp-http-server-rust/blob/main/src/headers.rs): `src/headers.rs`
- [Body abstraction](https://github.com/joes51/tcp-http-server-rust/blob/main/src/body.rs): `src/body.rs`

### Response formatting

- [Response writer](https://github.com/joes51/tcp-http-server-rust/blob/main/src/response.rs): `src/response.rs`

### Other components

- **HTTP client**

## Connections

- HTTP client → HTTP entrypoint: sends request (evidence: `README.md`)
- HTTP entrypoint → TCP server: starts server (evidence: `src/bin/httpserver.rs`)
- TCP server → Request parser: parses stream (evidence: `src/bin/server.rs`)
- TCP server → Path handler: dispatches request (evidence: `src/bin/server.rs`)
- Path handler → TCP server: returns body or error (evidence: `src/bin/server.rs`)
- Request parser → Header parsing: parses and reads (evidence: `src/request.rs`)
- TCP server → Response writer: writes status and headers (evidence: `src/bin/server.rs`)
- Response writer → Header parsing: builds default headers (evidence: `src/response.rs`)
- TCP server → HTTP client: writes response (evidence: `src/bin/server.rs`)
- Parse-and-print TCP → Request parser: parses stream (evidence: `src/main.rs`)
