Skip to content

Commit eabbebb

Browse files
committed
Add HTTP headers parsing
1 parent 8f35139 commit eabbebb

File tree

7 files changed

+420
-171
lines changed

7 files changed

+420
-171
lines changed

internal/jsonx/node.go

+11
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,16 @@ import (
66
jsonpath "github.com/antonmedv/fx/path"
77
)
88

9+
type NodeKind uint8
10+
11+
const (
12+
Unspecified NodeKind = iota
13+
HttpStatus
14+
HttpHeader
15+
HttpHeaderContinuation
16+
HttpBlank
17+
)
18+
919
type Node struct {
1020
Prev, Next, End *Node
1121
directParent *Node
@@ -19,6 +29,7 @@ type Node struct {
1929
ChunkEnd *Node
2030
Comma bool
2131
Index int
32+
Kind NodeKind
2233
}
2334

2435
// append ands a node as a child to the current node (body of {...} or [...]).

internal/jsonx/wrap.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import (
88

99
func DropWrapAll(n *Node) {
1010
for n != nil {
11-
if n.Value != nil && n.Value[0] == '"' {
11+
if n.Value != nil && (n.Value[0] == '"' || n.Kind == HttpHeader) {
1212
n.dropChunks()
1313
}
1414
if n.IsCollapsed() {
@@ -24,7 +24,7 @@ func WrapAll(n *Node, termWidth int) {
2424
return
2525
}
2626
for n != nil {
27-
if n.Value != nil && n.Value[0] == '"' {
27+
if n.Value != nil && (n.Value[0] == '"' || n.Kind == HttpHeader) {
2828
n.dropChunks()
2929
lines, count := doWrap(n, termWidth)
3030
if count > 1 {

internal/theme/theme.go

+167-131
Original file line numberDiff line numberDiff line change
@@ -15,17 +15,20 @@ import (
1515
)
1616

1717
type Theme struct {
18-
Cursor Color
19-
Syntax Color
20-
Preview Color
21-
StatusBar Color
22-
Search Color
23-
Key Color
24-
String Color
25-
Null Color
26-
Boolean Color
27-
Number Color
28-
Size Color
18+
Cursor Color
19+
Syntax Color
20+
Preview Color
21+
StatusBar Color
22+
Search Color
23+
Key Color
24+
String Color
25+
Null Color
26+
Boolean Color
27+
Number Color
28+
Size Color
29+
HttpStatus Color
30+
HttpHeaderName Color
31+
HttpHeaderValue Color
2932
}
3033

3134
type Color func(s []byte) []byte
@@ -119,150 +122,183 @@ var (
119122

120123
var themes = map[string]Theme{
121124
"0": {
122-
Cursor: defaultCursor,
123-
Syntax: noColor,
124-
Preview: noColor,
125-
StatusBar: noColor,
126-
Search: defaultSearch,
127-
Key: noColor,
128-
String: noColor,
129-
Null: noColor,
130-
Boolean: noColor,
131-
Number: noColor,
132-
Size: noColor,
125+
Cursor: defaultCursor,
126+
Syntax: noColor,
127+
Preview: noColor,
128+
StatusBar: noColor,
129+
Search: defaultSearch,
130+
Key: noColor,
131+
String: noColor,
132+
Null: noColor,
133+
Boolean: noColor,
134+
Number: noColor,
135+
Size: noColor,
136+
HttpStatus: noColor,
137+
HttpHeaderName: noColor,
138+
HttpHeaderValue: noColor,
133139
},
134140
"1": {
135-
Cursor: defaultCursor,
136-
Syntax: noColor,
137-
Preview: defaultPreview,
138-
StatusBar: defaultStatusBar,
139-
Search: defaultSearch,
140-
Key: boldFg("4"),
141-
String: fg("2"),
142-
Null: defaultNull,
143-
Boolean: fg("5"),
144-
Number: fg("6"),
145-
Size: defaultSize,
141+
Cursor: defaultCursor,
142+
Syntax: noColor,
143+
Preview: defaultPreview,
144+
StatusBar: defaultStatusBar,
145+
Search: defaultSearch,
146+
Key: boldFg("4"),
147+
String: fg("2"),
148+
Null: defaultNull,
149+
Boolean: fg("5"),
150+
Number: fg("6"),
151+
Size: defaultSize,
152+
HttpStatus: fg("2"),
153+
HttpHeaderName: boldFg("4"),
154+
HttpHeaderValue: fg("2"),
146155
},
147156
"2": {
148-
Cursor: defaultCursor,
149-
Syntax: noColor,
150-
Preview: defaultPreview,
151-
StatusBar: defaultStatusBar,
152-
Search: defaultSearch,
153-
Key: fg("2"),
154-
String: fg("4"),
155-
Null: defaultNull,
156-
Boolean: fg("5"),
157-
Number: fg("6"),
158-
Size: defaultSize,
157+
Cursor: defaultCursor,
158+
Syntax: noColor,
159+
Preview: defaultPreview,
160+
StatusBar: defaultStatusBar,
161+
Search: defaultSearch,
162+
Key: fg("2"),
163+
String: fg("4"),
164+
Null: defaultNull,
165+
Boolean: fg("5"),
166+
Number: fg("6"),
167+
Size: defaultSize,
168+
HttpStatus: fg("4"),
169+
HttpHeaderName: fg("2"),
170+
HttpHeaderValue: fg("4"),
159171
},
160172
"3": {
161-
Cursor: defaultCursor,
162-
Syntax: noColor,
163-
Preview: defaultPreview,
164-
StatusBar: defaultStatusBar,
165-
Search: defaultSearch,
166-
Key: fg("13"),
167-
String: fg("11"),
168-
Null: defaultNull,
169-
Boolean: fg("1"),
170-
Number: fg("14"),
171-
Size: defaultSize,
173+
Cursor: defaultCursor,
174+
Syntax: noColor,
175+
Preview: defaultPreview,
176+
StatusBar: defaultStatusBar,
177+
Search: defaultSearch,
178+
Key: fg("13"),
179+
String: fg("11"),
180+
Null: defaultNull,
181+
Boolean: fg("1"),
182+
Number: fg("14"),
183+
Size: defaultSize,
184+
HttpStatus: fg("11"),
185+
HttpHeaderName: fg("13"),
186+
HttpHeaderValue: fg("11"),
172187
},
173188
"4": {
174-
Cursor: defaultCursor,
175-
Syntax: noColor,
176-
Preview: defaultPreview,
177-
StatusBar: defaultStatusBar,
178-
Search: defaultSearch,
179-
Key: fg("#00F5D4"),
180-
String: fg("#00BBF9"),
181-
Null: defaultNull,
182-
Boolean: fg("#F15BB5"),
183-
Number: fg("#9B5DE5"),
184-
Size: defaultSize,
189+
Cursor: defaultCursor,
190+
Syntax: noColor,
191+
Preview: defaultPreview,
192+
StatusBar: defaultStatusBar,
193+
Search: defaultSearch,
194+
Key: fg("#00F5D4"),
195+
String: fg("#00BBF9"),
196+
Null: defaultNull,
197+
Boolean: fg("#F15BB5"),
198+
Number: fg("#9B5DE5"),
199+
Size: defaultSize,
200+
HttpStatus: fg("#00BBF9"),
201+
HttpHeaderName: fg("#00F5D4"),
202+
HttpHeaderValue: fg("#00BBF9"),
185203
},
186204
"5": {
187-
Cursor: defaultCursor,
188-
Syntax: noColor,
189-
Preview: defaultPreview,
190-
StatusBar: defaultStatusBar,
191-
Search: defaultSearch,
192-
Key: fg("#faf0ca"),
193-
String: fg("#f4d35e"),
194-
Null: defaultNull,
195-
Boolean: fg("#ee964b"),
196-
Number: fg("#ee964b"),
197-
Size: defaultSize,
205+
Cursor: defaultCursor,
206+
Syntax: noColor,
207+
Preview: defaultPreview,
208+
StatusBar: defaultStatusBar,
209+
Search: defaultSearch,
210+
Key: fg("#faf0ca"),
211+
String: fg("#f4d35e"),
212+
Null: defaultNull,
213+
Boolean: fg("#ee964b"),
214+
Number: fg("#ee964b"),
215+
Size: defaultSize,
216+
HttpStatus: fg("#f4d35e"),
217+
HttpHeaderName: fg("#faf0ca"),
218+
HttpHeaderValue: fg("#f4d35e"),
198219
},
199220
"6": {
200-
Cursor: defaultCursor,
201-
Syntax: noColor,
202-
Preview: defaultPreview,
203-
StatusBar: defaultStatusBar,
204-
Search: defaultSearch,
205-
Key: fg("#4D96FF"),
206-
String: fg("#6BCB77"),
207-
Null: defaultNull,
208-
Boolean: fg("#FF6B6B"),
209-
Number: fg("#FFD93D"),
210-
Size: defaultSize,
221+
Cursor: defaultCursor,
222+
Syntax: noColor,
223+
Preview: defaultPreview,
224+
StatusBar: defaultStatusBar,
225+
Search: defaultSearch,
226+
Key: fg("#4D96FF"),
227+
String: fg("#6BCB77"),
228+
Null: defaultNull,
229+
Boolean: fg("#FF6B6B"),
230+
Number: fg("#FFD93D"),
231+
Size: defaultSize,
232+
HttpStatus: fg("#6BCB77"),
233+
HttpHeaderName: fg("#4D96FF"),
234+
HttpHeaderValue: fg("#6BCB77"),
211235
},
212236
"7": {
213-
Cursor: defaultCursor,
214-
Syntax: noColor,
215-
Preview: defaultPreview,
216-
StatusBar: defaultStatusBar,
217-
Search: defaultSearch,
218-
Key: boldFg("42"),
219-
String: boldFg("213"),
220-
Null: defaultNull,
221-
Boolean: boldFg("201"),
222-
Number: boldFg("201"),
223-
Size: defaultSize,
237+
Cursor: defaultCursor,
238+
Syntax: noColor,
239+
Preview: defaultPreview,
240+
StatusBar: defaultStatusBar,
241+
Search: defaultSearch,
242+
Key: boldFg("42"),
243+
String: boldFg("213"),
244+
Null: defaultNull,
245+
Boolean: boldFg("201"),
246+
Number: boldFg("201"),
247+
Size: defaultSize,
248+
HttpStatus: boldFg("213"),
249+
HttpHeaderName: boldFg("42"),
250+
HttpHeaderValue: boldFg("213"),
224251
},
225252
"8": {
226-
Cursor: defaultCursor,
227-
Syntax: noColor,
228-
Preview: defaultPreview,
229-
StatusBar: defaultStatusBar,
230-
Search: defaultSearch,
231-
Key: boldFg("51"),
232-
String: fg("195"),
233-
Null: defaultNull,
234-
Boolean: fg("50"),
235-
Number: fg("123"),
236-
Size: defaultSize,
253+
Cursor: defaultCursor,
254+
Syntax: noColor,
255+
Preview: defaultPreview,
256+
StatusBar: defaultStatusBar,
257+
Search: defaultSearch,
258+
Key: boldFg("51"),
259+
String: fg("195"),
260+
Null: defaultNull,
261+
Boolean: fg("50"),
262+
Number: fg("123"),
263+
Size: defaultSize,
264+
HttpStatus: fg("195"),
265+
HttpHeaderName: boldFg("51"),
266+
HttpHeaderValue: fg("195"),
237267
},
238268
"🔵": {
239269
Cursor: toColor(lipgloss.NewStyle().
240270
Foreground(lipgloss.Color("15")).
241271
Background(lipgloss.Color("33")).
242272
Render),
243-
Syntax: boldFg("33"),
244-
Preview: defaultPreview,
245-
StatusBar: defaultStatusBar,
246-
Search: defaultSearch,
247-
Key: fg("33"),
248-
String: noColor,
249-
Null: noColor,
250-
Boolean: noColor,
251-
Number: noColor,
252-
Size: defaultSize,
273+
Syntax: boldFg("33"),
274+
Preview: defaultPreview,
275+
StatusBar: defaultStatusBar,
276+
Search: defaultSearch,
277+
Key: fg("33"),
278+
String: noColor,
279+
Null: noColor,
280+
Boolean: noColor,
281+
Number: noColor,
282+
Size: defaultSize,
283+
HttpStatus: noColor,
284+
HttpHeaderName: fg("33"),
285+
HttpHeaderValue: noColor,
253286
},
254287
"🥝": {
255-
Cursor: defaultCursor,
256-
Syntax: fg("179"),
257-
Preview: defaultPreview,
258-
StatusBar: defaultStatusBar,
259-
Search: defaultSearch,
260-
Key: boldFg("154"),
261-
String: fg("82"),
262-
Null: fg("230"),
263-
Boolean: fg("226"),
264-
Number: fg("226"),
265-
Size: defaultSize,
288+
Cursor: defaultCursor,
289+
Syntax: fg("179"),
290+
Preview: defaultPreview,
291+
StatusBar: defaultStatusBar,
292+
Search: defaultSearch,
293+
Key: boldFg("154"),
294+
String: fg("82"),
295+
Null: fg("230"),
296+
Boolean: fg("226"),
297+
Number: fg("226"),
298+
Size: defaultSize,
299+
HttpStatus: fg("82"),
300+
HttpHeaderName: boldFg("154"),
301+
HttpHeaderValue: fg("82"),
266302
},
267303
}
268304

0 commit comments

Comments
 (0)