From 2633fcb149001b68f30fa57f28c712b1c7c98f71 Mon Sep 17 00:00:00 2001 From: Blake Mizerany Date: Thu, 4 Apr 2024 14:09:26 -0700 Subject: [PATCH] x/model: disambiguate type names There are now more than just File to the model package. This change disambiguates types like Error to FileError, etc. It also helps line things up with GoDoc. --- x/model/file.go | 24 +++++++++++++----------- x/model/path.go | 14 +++++++------- 2 files changed, 20 insertions(+), 18 deletions(-) diff --git a/x/model/file.go b/x/model/file.go index 2f112784..5b400ab3 100644 --- a/x/model/file.go +++ b/x/model/file.go @@ -1,3 +1,4 @@ +// Package model implements the Modelfile and Path formats. package model import ( @@ -7,12 +8,12 @@ import ( "strings" ) -type Param struct { +type ParameterPragma struct { Key string Value string } -type Message struct { +type MessagePragma struct { Role string Content string } @@ -23,24 +24,25 @@ type File struct { From string // Optional - Params []Param + Params []ParameterPragma Template string System string Adapter string - Messages []Message + Messages []MessagePragma License string } -type Error struct { +type FileError struct { Pragma string Message string } -func (e *Error) Error() string { +func (e *FileError) Error() string { return e.Pragma + ": " + e.Message } +// Pragma represents a single pragma in a Modelfile. type Pragma struct { // The pragma name Name string @@ -57,7 +59,7 @@ func (p Pragma) Arg(i int) string { return p.Args[i] } -func Pragmas(r io.Reader) iter.Seq2[Pragma, error] { +func FilePragmas(r io.Reader) iter.Seq2[Pragma, error] { return func(yield func(Pragma, error) bool) { sc := bufio.NewScanner(r) for sc.Scan() { @@ -93,9 +95,9 @@ func Pragmas(r io.Reader) iter.Seq2[Pragma, error] { } } -func Decode(r io.Reader) (File, error) { +func ParseFile(r io.Reader) (File, error) { var f File - for p, err := range Pragmas(r) { + for p, err := range FilePragmas(r) { if err != nil { return File{}, err } @@ -103,7 +105,7 @@ func Decode(r io.Reader) (File, error) { case "FROM": f.From = p.Arg(0) case "PARAMETER": - f.Params = append(f.Params, Param{ + f.Params = append(f.Params, ParameterPragma{ Key: strings.ToLower(p.Arg(0)), Value: p.Arg(1), }) @@ -114,7 +116,7 @@ func Decode(r io.Reader) (File, error) { case "ADAPTER": f.Adapter = p.Arg(0) case "MESSAGE": - f.Messages = append(f.Messages, Message{ + f.Messages = append(f.Messages, MessagePragma{ Role: p.Arg(0), Content: p.Arg(1), }) diff --git a/x/model/path.go b/x/model/path.go index 197b74f3..569699ae 100644 --- a/x/model/path.go +++ b/x/model/path.go @@ -9,11 +9,11 @@ import ( const MaxPathLength = 255 -type PartKind int +type PathPart int // Levels of concreteness const ( - Invalid PartKind = iota + Invalid PathPart = iota Domain Namespace Name @@ -21,7 +21,7 @@ const ( Build ) -var kindNames = map[PartKind]string{ +var kindNames = map[PathPart]string{ Invalid: "Invalid", Domain: "Domain", Namespace: "Namespace", @@ -153,7 +153,7 @@ func (r Path) Build() string { return r.build } // "" func ParsePath(s string) Path { var r Path - for kind, part := range Parts(s) { + for kind, part := range PathParts(s) { switch kind { case Domain: r.domain = part @@ -196,8 +196,8 @@ func Merge(a, b Path) Path { // // It normalizes the input string by removing "http://" and "https://" only. // No other normalization is done. -func Parts(s string) iter.Seq2[PartKind, string] { - return func(yield func(PartKind, string) bool) { +func PathParts(s string) iter.Seq2[PathPart, string] { + return func(yield func(PathPart, string) bool) { if strings.HasPrefix(s, "http://") { s = s[len("http://"):] } @@ -209,7 +209,7 @@ func Parts(s string) iter.Seq2[PartKind, string] { return } - yieldValid := func(kind PartKind, part string) bool { + yieldValid := func(kind PathPart, part string) bool { if !isValidPart(part) { yield(Invalid, "") return false