From 2430f46a9948b38b06880606a95dec357d01f619 Mon Sep 17 00:00:00 2001 From: Alan Pearce Date: Sun, 5 May 2024 18:11:56 +0200 Subject: feat: render markdown in option descriptions --- internal/options/option.go | 57 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 internal/options/option.go (limited to 'internal/options/option.go') diff --git a/internal/options/option.go b/internal/options/option.go new file mode 100644 index 0000000..5255c65 --- /dev/null +++ b/internal/options/option.go @@ -0,0 +1,57 @@ +package options + +import ( + "encoding/json" + "strings" + + "github.com/pkg/errors" + "github.com/yuin/goldmark" +) + +type NixValue struct { + Type string `json:"_type" mapstructure:"_type"` + Text string `json:"text"` +} + +type HTML struct { + HTML string +} + +func (html *HTML) UnmarshalText(text []byte) error { + var out strings.Builder + err := goldmark.Convert(text, &out) + if err != nil { + return errors.WithMessage(err, "failed to convert markdown to HTML") + } + + html.HTML = out.String() + + return nil +} + +func (html *HTML) UnmarshalJSON(raw []byte) error { + var v struct { + HTML string + } + err := json.Unmarshal(raw, &v) + if err != nil { + return errors.WithMessage(err, "error unmarshaling json") + } + html.HTML = v.HTML + + return nil +} + +type NixOption struct { + Option string + Declarations []string + Default NixValue + Description HTML + Example NixValue + ReadOnly bool + Type string + Loc []string + RelatedPackages HTML +} + +type NixOptions []NixOption -- cgit 1.4.1