all repos

viye @ cf8afd92aed2f4da2448c272cbbb65f19b460f5b

my shot at reimplementing xiki

viye/internal/plumbing/json/json.go (view raw)

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
refactor, 1 month ago
1
package json
2
3
import (
4
	"encoding/json"
5
	"fmt"
6
	"strings"
7
8
	"github.com/olexsmir/viye/internal/viye"
9
)
10
11
type Tool struct{}
12
13
func (Tool) Name() string               { return "json" }
14
func (Tool) Match(c *viye.Context) bool { return c.Cmd == "json" }
15
func (Tool) Execute(c *viye.Context) (string, error) {
16
	if len(c.Body) == 0 {
17
		return ": name: your name\n" +
18
			": age: 0\n", nil
19
	}
20
21
	m := make(map[string]string)
22
	for _, line := range c.Body {
23
		line = strings.TrimPrefix(line, ": ")
24
		before, after, ok := strings.Cut(line, ":")
25
		if !ok {
26
			continue
27
		}
28
29
		key := strings.TrimSpace(before)
30
		val := strings.TrimSpace(after)
31
		if key != "" {
32
			m[key] = val
33
		}
34
	}
35
36
	mashaled, err := json.Marshal(m)
37
	if err != nil {
38
		return "", fmt.Errorf("demo: %w", err)
39
	}
40
	return fmt.Sprintf("| %s\n", string(mashaled)), nil
41
}