50 lines
1.0 KiB
Go
50 lines
1.0 KiB
Go
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 {
|
|
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
|
|
}
|