snapshot of https://github.com/sqlc-dev/sqlc.git (main, 2026-09-16; blobs > 131072B omitted)
Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled
Some checks failed
kotlin / test (push) Has been skipped
python / test (push) Has been skipped
typescript / test (push) Has been skipped
go / build darwin/amd64 (push) Has been cancelled
go / build linux/amd64 (push) Has been cancelled
go / build windows/amd64 (push) Has been cancelled
go / build darwin/arm64 (push) Has been cancelled
go / build linux/arm64 (push) Has been cancelled
go / build windows/arm64 (push) Has been cancelled
go / test (push) Has been cancelled
go / vuln_check (push) Has been cancelled
This commit is contained in:
84
internal/config/convert/convert.go
Normal file
84
internal/config/convert/convert.go
Normal file
@@ -0,0 +1,84 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"strconv"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
func gen(n *yaml.Node) (any, error) {
|
||||
switch n.Kind {
|
||||
|
||||
case yaml.MappingNode:
|
||||
nn := map[string]any{}
|
||||
for i, _ := range n.Content {
|
||||
if i%2 == 0 {
|
||||
k := n.Content[i]
|
||||
v, err := gen(n.Content[i+1])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nn[k.Value] = v
|
||||
}
|
||||
}
|
||||
return nn, nil
|
||||
|
||||
case yaml.SequenceNode:
|
||||
nn := []any{}
|
||||
for i, _ := range n.Content {
|
||||
v, err := gen(n.Content[i])
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
nn = append(nn, v)
|
||||
}
|
||||
return nn, nil
|
||||
|
||||
case yaml.ScalarNode:
|
||||
switch n.Tag {
|
||||
|
||||
case "!!bool":
|
||||
return strconv.ParseBool(n.Value)
|
||||
|
||||
case "!!float":
|
||||
return strconv.ParseFloat(n.Value, 64)
|
||||
|
||||
case "!!int":
|
||||
return strconv.Atoi(n.Value)
|
||||
|
||||
case "!!null":
|
||||
return nil, nil
|
||||
|
||||
case "!!str":
|
||||
return n.Value, nil
|
||||
|
||||
default:
|
||||
return n.Value, nil
|
||||
|
||||
}
|
||||
|
||||
case yaml.AliasNode:
|
||||
return gen(n.Alias)
|
||||
|
||||
default:
|
||||
return nil, fmt.Errorf("unknown yaml value: %s (%s)", n.Value, n.Tag)
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
func YAMLtoJSON(n yaml.Node) ([]byte, error) {
|
||||
if n.Kind == 0 {
|
||||
return []byte{}, nil
|
||||
}
|
||||
iface, err := gen(&n)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
blob, err := json.Marshal(iface)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return blob, nil
|
||||
}
|
||||
47
internal/config/convert/convert_test.go
Normal file
47
internal/config/convert/convert_test.go
Normal file
@@ -0,0 +1,47 @@
|
||||
package convert
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"gopkg.in/yaml.v3"
|
||||
)
|
||||
|
||||
const anchor = `
|
||||
sql:
|
||||
- schema: query.sql
|
||||
queries: query.sql
|
||||
engine: postgresql
|
||||
codegen:
|
||||
- out: gateway/src/gateway/services/organization
|
||||
plugin: py
|
||||
options: &base-options
|
||||
query_parameter_limit: 1
|
||||
package: gateway
|
||||
output_models_file_name: null
|
||||
emit_module: true
|
||||
emit_generators: false
|
||||
emit_async: true
|
||||
|
||||
- schema: query.sql
|
||||
queries: query.sql
|
||||
engine: postgresql
|
||||
codegen:
|
||||
- out: gateway/src/gateway/services/project
|
||||
plugin: py
|
||||
options: *base-options
|
||||
`
|
||||
|
||||
type config struct {
|
||||
SQL yaml.Node `yaml:"sql"`
|
||||
}
|
||||
|
||||
func TestAlias(t *testing.T) {
|
||||
var a config
|
||||
err := yaml.Unmarshal([]byte(anchor), &a)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if _, err := gen(&a.SQL); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user