v0.0.294 migrate bfcodegen to templates
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 58s
All checks were successful
Build Docker and Deploy / Run goext test-suite (push) Successful in 58s
This commit is contained in:
@@ -1,6 +1,8 @@
|
||||
package bfcodegen
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"errors"
|
||||
"fmt"
|
||||
"gogs.mikescher.com/BlackForestBytes/goext"
|
||||
@@ -14,6 +16,7 @@ import (
|
||||
"path/filepath"
|
||||
"regexp"
|
||||
"strings"
|
||||
"text/template"
|
||||
"time"
|
||||
)
|
||||
|
||||
@@ -29,6 +32,9 @@ var rexIDDef = rext.W(regexp.MustCompile(`^\s*type\s+(?P<name>[A-Za-z0-9_]+)\s+s
|
||||
|
||||
var rexIDChecksumConst = rext.W(regexp.MustCompile(`const ChecksumIDGenerator = "(?P<cs>[A-Za-z0-9_]*)"`))
|
||||
|
||||
//go:embed id-generate.template
|
||||
var templateIDGenerateText string
|
||||
|
||||
func GenerateIDSpecs(sourceDir string, destFile string) error {
|
||||
|
||||
files, err := os.ReadDir(sourceDir)
|
||||
@@ -166,71 +172,22 @@ func processIDFile(basedir string, fn string) ([]IDDef, string, error) {
|
||||
}
|
||||
|
||||
func fmtIDOutput(cs string, ids []IDDef, pkgname string) string {
|
||||
str := "// Code generated by id-generate.go DO NOT EDIT.\n"
|
||||
str += "\n"
|
||||
str += "package " + pkgname + "\n"
|
||||
str += "\n"
|
||||
templ := template.Must(template.New("id-generate").Parse(templateIDGenerateText))
|
||||
|
||||
str += "import \"go.mongodb.org/mongo-driver/bson\"" + "\n"
|
||||
str += "import \"go.mongodb.org/mongo-driver/bson/bsontype\"" + "\n"
|
||||
str += "import \"go.mongodb.org/mongo-driver/bson/primitive\"" + "\n"
|
||||
str += "import \"gogs.mikescher.com/BlackForestBytes/goext/exerr\"" + "\n"
|
||||
str += "\n"
|
||||
|
||||
str += "const ChecksumIDGenerator = \"" + cs + "\" // GoExtVersion: " + goext.GoextVersion + "\n"
|
||||
str += "\n"
|
||||
buffer := bytes.Buffer{}
|
||||
|
||||
anyDef := langext.ArrFirstOrNil(ids, func(def IDDef) bool { return def.Name == "AnyID" || def.Name == "AnyId" })
|
||||
|
||||
for _, iddef := range ids {
|
||||
|
||||
str += "// ================================ " + iddef.Name + " (" + iddef.FileRelative + ") ================================" + "\n"
|
||||
str += "" + "\n"
|
||||
|
||||
str += "func (i " + iddef.Name + ") MarshalBSONValue() (bsontype.Type, []byte, error) {" + "\n"
|
||||
str += " if objId, err := primitive.ObjectIDFromHex(string(i)); err == nil {" + "\n"
|
||||
str += " return bson.MarshalValue(objId)" + "\n"
|
||||
str += " } else {" + "\n"
|
||||
str += " return 0, nil, exerr.New(exerr.TypeMarshalEntityID, \"Failed to marshal " + iddef.Name + "(\"+i.String()+\") to ObjectId\").Str(\"value\", string(i)).Type(\"type\", i).Build()" + "\n"
|
||||
str += " }" + "\n"
|
||||
str += "}" + "\n"
|
||||
|
||||
str += "" + "\n"
|
||||
|
||||
str += "func (i " + iddef.Name + ") String() string {" + "\n"
|
||||
str += " return string(i)" + "\n"
|
||||
str += "}" + "\n"
|
||||
|
||||
str += "" + "\n"
|
||||
|
||||
str += "func (i " + iddef.Name + ") ObjID() (primitive.ObjectID, error) {" + "\n"
|
||||
str += " return primitive.ObjectIDFromHex(string(i))" + "\n"
|
||||
str += "}" + "\n"
|
||||
|
||||
str += "" + "\n"
|
||||
|
||||
str += "func (i " + iddef.Name + ") Valid() bool {" + "\n"
|
||||
str += " _, err := primitive.ObjectIDFromHex(string(i))" + "\n"
|
||||
str += " return err == nil" + "\n"
|
||||
str += "}" + "\n"
|
||||
|
||||
str += "" + "\n"
|
||||
|
||||
if anyDef != nil {
|
||||
str += "func (i " + iddef.Name + ") AsAny() " + anyDef.Name + " {" + "\n"
|
||||
str += " return " + anyDef.Name + "(i)" + "\n"
|
||||
str += "}" + "\n"
|
||||
|
||||
str += "" + "\n"
|
||||
}
|
||||
|
||||
str += "func New" + iddef.Name + "() " + iddef.Name + " {" + "\n"
|
||||
str += " return " + iddef.Name + "(primitive.NewObjectID().Hex())" + "\n"
|
||||
str += "}" + "\n"
|
||||
|
||||
str += "" + "\n"
|
||||
|
||||
err := templ.Execute(&buffer, langext.H{
|
||||
"PkgName": pkgname,
|
||||
"Checksum": cs,
|
||||
"GoextVersion": goext.GoextVersion,
|
||||
"IDs": ids,
|
||||
"AnyDef": anyDef,
|
||||
})
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
return str
|
||||
return buffer.String()
|
||||
}
|
||||
|
Reference in New Issue
Block a user