v0.1.2

Architecture

This page shows go-rest-client's layers and cross-layer rules in a single overview diagram; module internals, sequence diagrams, and the state machine live in doc/architecture.md.

System Overview

graph TB
    CLI[cmd/tui entry] -->|file path| P[internal/parser]
    CLI -->|create| T[internal/ui TUI]
    CLI -->|create| W[fsnotify Watcher]
    F[.http File] --> P
    W -->|Write / Create events| P
    P -->|Requests| T
    T -->|Enter| H[net/http Client]
    H -->|regular response| R[handleResponse]
    H -->|text/event-stream| S[handleSSEResponse]
    R --> V[Info pane]
    S --> V

Layers

Layer Path Responsibility
Entry cmd/tui/main.go Validate arguments, create the watcher and TUI, run the initial parse, start the event loop
Parsing internal/parser/parser.go Line-by-line .http parsing, header name validation, file watching and reload
UI and transport internal/ui/tui.go tview layout, key bindings, sending HTTP requests, rendering regular and SSE responses

Both packages live under internal/ and cannot be imported by other modules; parser depends on the ui types TUI and Request, while ui does not depend on parser.

Cross-Layer Rules

Rule Implementation
UI updates only inside the event loop Background goroutines always change the screen via App.QueueUpdateDraw
The request list is lock-protected TUI.Requests is guarded by a sync.RWMutex (TUI.Mu) so reload writes and send reads do not interfere
Sending never blocks the UI Each Enter runs in its own goroutine with a 120-second context timeout
Reloads are debounced A 200ms timer merges bursts of write events; the timer itself is mutex-protected
中文