0.0.970 cdbcd03

payload.go RawHistoryFolder

1package common
2
3import (
4	"encoding/json"
5	"fmt"
6)
7
8type RequestPayload struct {
9	Type    string  `json:"type"`
10	Payload Payload `json:"payload"`
11}
12
13type Payload interface {
14	GetType() string
15}
16
17func (p *RequestPayload) UnmarshalJSON(data []byte) error {
18	var raw map[string]json.RawMessage
19	err := json.Unmarshal(data, &raw)
20	if err != nil {
21		return err
22	}
23
24	if err := json.Unmarshal(raw["type"], &p.Type); err != nil {
25		return err
26	}
27
28	switch p.Type {
29	case "ping":
30		var payload PingPayload
31		if err := json.Unmarshal(raw["payload"], &payload); err != nil {
32			return err
33		}
34		p.Payload = payload
35	case "push":
36		var payload PushPayload
37		if err := json.Unmarshal(raw["payload"], &payload); err != nil {
38			return err
39		}
40		p.Payload = payload
41	}
42	return nil
43}
44
45type PingPayload struct {
46	Message string `json:"message"`
47}
48
49func (p PingPayload) GetType() string {
50	return "ping"
51}
52
53func (p PushPayload) GetType() string {
54	return "push"
55}
56
57func NewPingPayload(data map[string]interface{}) (PingPayload, error) {
58	message, ok := data["message"].(string)
59	if !ok {
60		return PingPayload{}, fmt.Errorf("invalid data for message")
61	}
62	return PingPayload{Message: message}, nil
63}
64
65// What do we need inside the push payload :
66// the ports as a string (80:80/tcp, 443:443/tcp)
67// the image+tag as a string (nginx:latest)
68// the .tar container image as a byte array
69
70type PushPayload struct {
71	Ports        string `json:"ports"`
72	TargetDomain string `json:"targetdomain"`
73	ImageName    string `json:"imagename"`
74	Data         []byte `json:"data"`
75}

Keyboard shortcuts

Single-key shortcuts are on. ctrl k and esc work whatever this says.

ctrl k :
go to a section, branch, tag, file or repository
?
this list
j k
move the row cursor down / up
enter
open the row under the cursor; on Files, a directory opens or closes in place
↑ ↓ ← → home end
in the file tree (focus on a row): previous / next row, close / open a directory or go to its parent / first entry, first / last row. They never open a file
l h
on Files: open a directory or a file / close a directory or go up to its parent, then to the parent page. Elsewhere: into the side panel (on a merge request, its files) / back to the content; there j k move between its controls
g g G
first / last row
/
filter the list; on Files, find a file anywhere in the repository (esc clears, enter opens the best match)
b
switch branch or tag
g s g f g c g b g m g i g r g a
tabs: summary, files, commits, branches & tags, merge requests, issues, releases, actions (when available)
g h
home
w
wide mode: use the whole width of the screen, or not (remembered)
y
copy a permalink pinned to the commit
d u x
diff: split / unified / collapse or expand all
e E
diff: the whole file in view / every file, with the lines the hunks hide
n
merge request: next note in the diff
esc
close a dialog, leave a field

Branches 7

Tags 106

↑↓ moveenter openesc close