# denizgursoy/inpu architecture

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

- Interactive diagram: https://gitdiagram.com/denizgursoy/inpu
- Repository: https://github.com/denizgursoy/inpu

## Overview

Inpu is a Go HTTP-client library. A caller configures a reusable client or creates a package-level request, builds method, URL, query, headers and optional body, then sends it through HTTP transport and handles the response by status. The runtime also supports retries, OAuth2, logging and OpenTelemetry middleware. The graph reflects the README and sampled files; several core implementations were not included, so uncertain internal wiring is omitted.

Main entry points: [`middleware.go`](https://github.com/denizgursoy/inpu/blob/main/middleware.go) (Middleware chain), [`request.go`](https://github.com/denizgursoy/inpu/blob/main/request.go) (Request builder), [`request_on.go`](https://github.com/denizgursoy/inpu/blob/main/request_on.go) (Status dispatch), [`logger.go`](https://github.com/denizgursoy/inpu/blob/main/logger.go) (Logger interface)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_request["Client and Requests"]
  node_client["Client setup<br/>[client.go]"]
  node_request_api["Request API<br/>[request.go]"]
  node_req["Request builder<br/>[request.go]"]
  node_query["Query and headers<br/>[headers.go]"]
  node_body["Body encoders<br/>[body.go]"]
end

subgraph group_execution["Execution Middleware"]
  node_send["Send request<br/>[request.go]"]
  node_transport["HTTP transport"]
  node_middleware["Middleware chain<br/>[middleware.go]"]
  node_retry["Retry middleware"]
  node_oauth["OAuth2 credentials"]
end

subgraph group_response["Response Handling"]
  node_response["Status dispatch<br/>[request_on.go]"]
  node_matchers["Status matchers<br/>[status_matchers.go]"]
  node_handlers["Response handlers"]
end

subgraph group_integration["Logging and Observability"]
  node_logger["Logging middleware"]
  node_otel["OpenTelemetry<br/>[middleware.go]"]
  node_logger_api["Logger interface<br/>[logger.go]"]
  node_zap["Zap adapter<br/>[logger.go]"]
  node_zero["Zerolog adapter<br/>[logger.go]"]
end

node_caller(("Application"))
node_server(("HTTP server"))
node_otel_sdk(("OpenTelemetry SDK"))

node_caller -->|"configures"| node_client
node_caller -->|"starts request"| node_request_api
node_client -->|"creates"| node_req
node_request_api -->|"creates"| node_req
node_caller -->|"sets options"| node_req
node_req -->|"adds parameters"| node_query
node_req -->|"encodes body"| node_body
node_req -->|"sends"| node_send
node_send -->|"dispatches through"| node_middleware
node_middleware -->|"wraps transport"| node_transport
node_middleware -.->|"applies"| node_retry
node_middleware -.->|"applies"| node_oauth
node_middleware -.->|"applies"| node_logger
node_middleware -.->|"applies"| node_otel
node_transport -->|"sends HTTP"| node_server
node_server -->|"returns response"| node_send
node_send -->|"dispatches response"| node_response
node_response -->|"checks status"| node_matchers
node_response -->|"runs handler"| node_handlers
node_logger -->|"uses"| node_logger_api
node_zap -->|"implements"| node_logger_api
node_zero -->|"implements"| node_logger_api
node_otel -->|"records telemetry"| node_otel_sdk

click node_client "https://github.com/denizgursoy/inpu/blob/main/client.go"
click node_request_api "https://github.com/denizgursoy/inpu/blob/main/request.go"
click node_req "https://github.com/denizgursoy/inpu/blob/main/request.go"
click node_query "https://github.com/denizgursoy/inpu/blob/main/headers.go"
click node_body "https://github.com/denizgursoy/inpu/blob/main/body.go"
click node_send "https://github.com/denizgursoy/inpu/blob/main/request.go"
click node_transport "https://github.com/denizgursoy/inpu/blob/main/default_http_client.go"
click node_middleware "https://github.com/denizgursoy/inpu/blob/main/middleware.go"
click node_retry "https://github.com/denizgursoy/inpu/blob/main/retry_middleware.go"
click node_oauth "https://github.com/denizgursoy/inpu/blob/main/middlewares/oauth2/client_credential.go"
click node_response "https://github.com/denizgursoy/inpu/blob/main/request_on.go"
click node_matchers "https://github.com/denizgursoy/inpu/blob/main/status_matchers.go"
click node_handlers "https://github.com/denizgursoy/inpu/blob/main/response_handlers.go"
click node_logger "https://github.com/denizgursoy/inpu/blob/main/logging_middleware.go"
click node_otel "https://github.com/denizgursoy/inpu/blob/main/middlewares/otel/middleware.go"
click node_logger_api "https://github.com/denizgursoy/inpu/blob/main/logger.go"
click node_zap "https://github.com/denizgursoy/inpu/blob/main/loggers/zap/logger.go"
click node_zero "https://github.com/denizgursoy/inpu/blob/main/loggers/zero/logger.go"

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_client,node_request_api,node_req,node_query,node_body toneBlue
class node_send,node_transport,node_middleware,node_retry,node_oauth toneAmber
class node_response,node_matchers,node_handlers,node_server toneMint
class node_logger,node_otel,node_logger_api,node_zap,node_zero toneRose
class node_caller,node_otel_sdk toneIndigo
```

## Components

### Client and Requests

- [Client setup](https://github.com/denizgursoy/inpu/blob/main/client.go): `client.go`
- [Request API](https://github.com/denizgursoy/inpu/blob/main/request.go): `request.go`
- [Request builder](https://github.com/denizgursoy/inpu/blob/main/request.go): `request.go`
- [Query and headers](https://github.com/denizgursoy/inpu/blob/main/headers.go): `headers.go`
- [Body encoders](https://github.com/denizgursoy/inpu/blob/main/body.go): `body.go`

### Execution Middleware

- [Send request](https://github.com/denizgursoy/inpu/blob/main/request.go): `request.go`
- [HTTP transport](https://github.com/denizgursoy/inpu/blob/main/default_http_client.go): `default_http_client.go`
- [Middleware chain](https://github.com/denizgursoy/inpu/blob/main/middleware.go): `middleware.go`
- [Retry middleware](https://github.com/denizgursoy/inpu/blob/main/retry_middleware.go): `retry_middleware.go`
- [OAuth2 credentials](https://github.com/denizgursoy/inpu/blob/main/middlewares/oauth2/client_credential.go): `middlewares/oauth2/client_credential.go`

### Response Handling

- [Status dispatch](https://github.com/denizgursoy/inpu/blob/main/request_on.go): `request_on.go`
- [Status matchers](https://github.com/denizgursoy/inpu/blob/main/status_matchers.go): `status_matchers.go`
- [Response handlers](https://github.com/denizgursoy/inpu/blob/main/response_handlers.go): `response_handlers.go`

### Logging and Observability

- [Logging middleware](https://github.com/denizgursoy/inpu/blob/main/logging_middleware.go): `logging_middleware.go`
- [OpenTelemetry](https://github.com/denizgursoy/inpu/blob/main/middlewares/otel/middleware.go): `middlewares/otel/middleware.go`
- [Logger interface](https://github.com/denizgursoy/inpu/blob/main/logger.go): `logger.go`
- [Zap adapter](https://github.com/denizgursoy/inpu/blob/main/loggers/zap/logger.go): `loggers/zap/logger.go`
- [Zerolog adapter](https://github.com/denizgursoy/inpu/blob/main/loggers/zero/logger.go): `loggers/zero/logger.go`

### Other components

- **Application**
- **HTTP server**
- **OpenTelemetry SDK**

## Connections

- Application → Client setup: configures
- Application → Request API: starts request
- Client setup → Request builder: creates
- Request API → Request builder: creates
- Application → Request builder: sets options
- Request builder → Query and headers: adds parameters
- Request builder → Body encoders: encodes body
- Request builder → Send request: sends
- Send request → Middleware chain: dispatches through
- Middleware chain → HTTP transport: wraps transport
- Middleware chain → Retry middleware: applies
- Middleware chain → OAuth2 credentials: applies
- Middleware chain → Logging middleware: applies
- Middleware chain → OpenTelemetry: applies
- HTTP transport → HTTP server: sends HTTP
- HTTP server → Send request: returns response
- Send request → Status dispatch: dispatches response
- Status dispatch → Status matchers: checks status
- Status dispatch → Response handlers: runs handler
- Logging middleware → Logger interface: uses
- Zap adapter → Logger interface: implements
- Zerolog adapter → Logger interface: implements
- OpenTelemetry → OpenTelemetry SDK: records telemetry
