123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- package config
- import (
- "fmt"
- "io"
- "path/filepath"
- yaml "gopkg.in/yaml.v3"
- )
- func v2ParseConfig(rd io.Reader) (Config, error) {
- dec := yaml.NewDecoder(rd)
- dec.KnownFields(true)
- var conf Config
- if err := dec.Decode(&conf); err != nil {
- return conf, err
- }
- if conf.Version == "" {
- return conf, ErrMissingVersion
- }
- if conf.Version != "2" {
- return conf, ErrUnknownVersion
- }
- if len(conf.SQL) == 0 {
- return conf, ErrNoPackages
- }
- if err := conf.validateGlobalOverrides(); err != nil {
- return conf, err
- }
- if conf.Gen.Go != nil {
- for i := range conf.Gen.Go.Overrides {
- if err := conf.Gen.Go.Overrides[i].Parse(); err != nil {
- return conf, err
- }
- }
- }
- for j := range conf.SQL {
- if conf.SQL[j].Engine == "" {
- return conf, ErrMissingEngine
- }
- if conf.SQL[j].Gen.Go != nil {
- if conf.SQL[j].Gen.Go.Out == "" {
- return conf, ErrNoPackagePath
- }
- if conf.SQL[j].Gen.Go.Package == "" {
- conf.SQL[j].Gen.Go.Package = filepath.Base(conf.SQL[j].Gen.Go.Out)
- }
- for i := range conf.SQL[j].Gen.Go.Overrides {
- if err := conf.SQL[j].Gen.Go.Overrides[i].Parse(); err != nil {
- return conf, err
- }
- }
- }
- if conf.SQL[j].Gen.Kotlin != nil {
- if conf.SQL[j].Gen.Kotlin.Out == "" {
- return conf, ErrNoOutPath
- }
- if conf.SQL[j].Gen.Kotlin.Package == "" {
- return conf, ErrNoPackageName
- }
- }
- if conf.SQL[j].Gen.Python != nil {
- if conf.SQL[j].Gen.Python.Out == "" {
- return conf, ErrNoOutPath
- }
- if conf.SQL[j].Gen.Python.Package == "" {
- return conf, ErrNoPackageName
- }
- if !conf.SQL[j].Gen.Python.EmitSyncQuerier && !conf.SQL[j].Gen.Python.EmitAsyncQuerier {
- return conf, ErrNoQuerierType
- }
- for i := range conf.SQL[j].Gen.Python.Overrides {
- if err := conf.SQL[j].Gen.Python.Overrides[i].Parse(); err != nil {
- return conf, err
- }
- }
- }
- }
- return conf, nil
- }
- func (c *Config) validateGlobalOverrides() error {
- engines := map[Engine]struct{}{}
- for _, pkg := range c.SQL {
- if _, ok := engines[pkg.Engine]; !ok {
- engines[pkg.Engine] = struct{}{}
- }
- }
- if c.Gen.Go == nil {
- return nil
- }
- usesMultipleEngines := len(engines) > 1
- for _, oride := range c.Gen.Go.Overrides {
- if usesMultipleEngines && oride.Engine == "" {
- return fmt.Errorf(`the "engine" field is required for global type overrides because your configuration uses multiple database engines`)
- }
- }
- return nil
- }
|