github.com/cloud-foundations/dominator@v0.0.0-20221004181915-6e4fee580046/lib/filegen/util/load.go (about) 1 package util 2 3 import ( 4 "fmt" 5 "strings" 6 7 "github.com/Cloud-Foundations/Dominator/lib/filegen" 8 "github.com/Cloud-Foundations/Dominator/lib/fsutil" 9 ) 10 11 type configFunc func(*filegen.Manager, string, []string) error 12 13 type configType struct { 14 minParams int 15 maxParams int 16 configFunc configFunc 17 } 18 19 var configs = map[string]configType{ 20 "DynamicTemplateFile": {1, 1, dynamicTemplateFileGenerator}, 21 "File": {1, 1, fileGenerator}, 22 "MDB": {0, 0, mdbGenerator}, 23 "StaticTemplateFile": {1, 1, staticTemplateFileGenerator}, 24 } 25 26 func loadConfiguration(manager *filegen.Manager, filename string) error { 27 lines, err := fsutil.LoadLines(filename) 28 if err != nil { 29 return fmt.Errorf("error loading configuration file: %s", err) 30 } 31 for _, line := range lines { 32 fields := strings.Fields(line) 33 if len(fields) < 2 { 34 return fmt.Errorf("insufficient fields in line: \"%s\"", line) 35 } 36 config, ok := configs[fields[0]] 37 if !ok { 38 return fmt.Errorf("unknown generator type: %s", fields[0]) 39 } 40 numParams := len(fields) - 2 41 if numParams < config.minParams { 42 return fmt.Errorf("insufficient params in line: \"%s\"", line) 43 } 44 if config.maxParams >= 0 && numParams > config.maxParams { 45 return fmt.Errorf("too many params in line: \"%s\"", line) 46 } 47 if err := config.configFunc(manager, fields[1], 48 fields[2:]); err != nil { 49 return err 50 } 51 } 52 return nil 53 } 54 55 func dynamicTemplateFileGenerator(manager *filegen.Manager, pathname string, 56 params []string) error { 57 return manager.RegisterTemplateFileForPath(pathname, params[0], true) 58 } 59 60 func fileGenerator(manager *filegen.Manager, pathname string, 61 params []string) error { 62 manager.RegisterFileForPath(pathname, params[0]) 63 return nil 64 } 65 66 func mdbGenerator(manager *filegen.Manager, pathname string, 67 params []string) error { 68 manager.RegisterMdbGeneratorForPath(pathname) 69 return nil 70 } 71 72 func staticTemplateFileGenerator(manager *filegen.Manager, pathname string, 73 params []string) error { 74 return manager.RegisterTemplateFileForPath(pathname, params[0], false) 75 }