all repos

viye @ 9f9e365d9f5437ceeb417be7809b0c3c43e42601

my shot at reimplementing xiki

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

Oleksandr Smirnov Oleksandr Smirnov
olexsmir@gmail.com
files: support ./ paths; add gobin; add json, 2 months 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(ctx *viye.Context) bool { return ctx.Cmd == "json" }
15
func (Tool) Execute(ctx *viye.Context) (string, error) {
16
	// Phase 1: no body → return editable template
17
	if len(ctx.Body) == 0 {
18
		return ": name: your name\n: age: 0\n", nil
19
	}
20
21
	// Phase 2: body present → parse and produce JSON
22
	m := make(map[string]string)
23
	for _, line := range ctx.Body {
24
		// Strip ": " prefix
25
		line = strings.TrimPrefix(line, ": ")
26
		col := strings.Index(line, ":")
27
		if col < 0 {
28
			continue
29
		}
30
		key := strings.TrimSpace(line[:col])
31
		val := strings.TrimSpace(line[col+1:])
32
		if key != "" {
33
			m[key] = val
34
		}
35
	}
36
37
	b, err := json.Marshal(m)
38
	if err != nil {
39
		return "", fmt.Errorf("demo: %w", err)
40
	}
41
	return fmt.Sprintf("| %s\n", string(b)), nil
42
}