yt-gen-app/main.go

96 lines
2.2 KiB
Go

package main
import (
"encoding/json"
"flag"
"fmt"
"log"
"os"
"path/filepath"
"git.ymnuktech.ru/ymnuk/yt-gen-app/lib"
"git.ymnuktech.ru/ymnuk/yt-gen-app/structs"
"github.com/creasty/defaults"
"gopkg.in/yaml.v3"
)
func main() {
lib.PrepareParams()
if lib.AppConfig.IsHelp {
flag.Usage()
os.Exit(0)
}
if lib.AppConfig.Filename == "" {
flag.Usage()
os.Exit(0)
}
var err error
if lib.AppConfig.Filename, err = filepath.Abs(lib.AppConfig.Filename); err != nil {
log.Fatal(err)
}
lib.Project = &structs.Project{}
if _, err = os.Stat(lib.AppConfig.Filename); os.IsNotExist(err) {
log.Fatal(`Метафайл не найден`)
} else if err != nil {
log.Fatal(err)
}
var buff []byte
if buff, err = os.ReadFile(lib.AppConfig.Filename); err != nil {
log.Fatal(err)
}
if err = yaml.Unmarshal(buff, lib.Project); err == nil {
lib.AppConfig.IsYaml = true
} else if err = json.Unmarshal(buff, lib.Project); err == nil {
lib.AppConfig.IsJson = true
} else {
log.Fatal("Ошибка открытия файла")
}
if err = defaults.Set(lib.Project); err != nil {
log.Fatal(err)
}
// Подгтовка абсолютных путей
if lib.AppConfig.OutdirBackend != "" {
if lib.AppConfig.OutdirBackend, err = filepath.Abs(lib.AppConfig.OutdirBackend); err != nil {
log.Fatal(err)
}
}
if lib.AppConfig.OutdirFrontend != "" {
if lib.AppConfig.OutdirFrontend, err = filepath.Abs(lib.AppConfig.OutdirFrontend); err != nil {
log.Fatal(err)
}
}
lib.PrepareMetadata(lib.Project)
lib.Generate()
dir := filepath.Dir(lib.AppConfig.Filename)
filename := filepath.Base(lib.AppConfig.Filename)
filenameWithoutExt := fileNameWithoutExtSliceNotation(filename)
buff = nil
if buff, err = yaml.Marshal(&lib.Project); err != nil {
log.Fatal(err)
}
if err = os.WriteFile(fmt.Sprintf("%s/%s.yml", dir, filenameWithoutExt), buff, 0755); err != nil {
log.Fatal(err)
}
buff = nil
if buff, err = json.Marshal(&lib.Project); err != nil {
log.Fatal(err)
}
if err = os.WriteFile(fmt.Sprintf("%s/%s.json", dir, filenameWithoutExt), buff, 0755); err != nil {
log.Fatal(err)
}
}
func fileNameWithoutExtSliceNotation(fileName string) string {
return fileName[:len(fileName)-len(filepath.Ext(fileName))]
}