From 6c396107c87bc70533cefa76005c54f82bd7752a Mon Sep 17 00:00:00 2001 From: Egor Aristov Date: Tue, 21 Oct 2025 10:57:08 +0300 Subject: [PATCH] tons of code --- kitcom/gogen.go | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/kitcom/gogen.go b/kitcom/gogen.go index d402be3..84a5b9e 100644 --- a/kitcom/gogen.go +++ b/kitcom/gogen.go @@ -1,9 +1,49 @@ package main +import ( + "errors" + "fmt" + "html/template" + "os" + "path/filepath" + "strings" +) + type GoApiGenerator struct { } +var tpl = template.Must(template.New("gotpl").Parse(strings.TrimSpace(` + + + +`))) + func (g *GoApiGenerator) Generate(api *Api, destFile string) error { - //TODO implement me - panic("implement me") + destFileBak := filepath.Join(destFile, ".bak") + _, err := os.Stat(destFile) + if err != nil && !errors.Is(err, os.ErrNotExist) { + return fmt.Errorf("stat destination file: %w", err) + } + if !errors.Is(err, os.ErrNotExist) { + if err := os.Rename(destFile, destFileBak); err != nil { + return fmt.Errorf("backup destination file: %w", err) + } + } + + f, err := os.OpenFile(destFile, os.O_WRONLY|os.O_CREATE, 0644) + if err != nil { + return fmt.Errorf("open destination file: %w", err) + } + defer f.Close() + + if err := tpl.Execute(f, api); err != nil { + return fmt.Errorf("execute template: %w", err) + } + + if _, err := os.Stat(destFileBak); err == nil { + if err := os.Remove(destFileBak); err != nil { + return fmt.Errorf("remove backup file: %w", err) + } + } + return nil }