Skip to content

Commit

Permalink
feat: Add schema writing helper for gen code (#29)
Browse files Browse the repository at this point in the history
  • Loading branch information
candiduslynx authored Oct 2, 2023
1 parent b1262f7 commit 2669d7e
Show file tree
Hide file tree
Showing 3 changed files with 25 additions and 5 deletions.
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ require (
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/resources/armmanagedapplications v1.1.1
github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/solutions/armmanagedapplications v1.1.1
github.com/google/go-cmp v0.5.9
github.com/invopop/jsonschema v0.10.0
github.com/invopop/jsonschema v0.11.0
github.com/jpillora/longestcommon v0.0.0-20161227235612-adb9d91ee629
golang.org/x/exp v0.0.0-20230905200255-921286631fa9
)
Expand Down
4 changes: 2 additions & 2 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,8 @@ github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOW
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/uuid v1.3.0 h1:t6JiXgmwXMjEs8VusXIJk2BXHsn+wx8BZdTaoZ5fu7I=
github.com/invopop/jsonschema v0.10.0 h1:c1ktzNLBun3LyQQhyty5WE3lulbOdIIyOVlkmDLehcE=
github.com/invopop/jsonschema v0.10.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/invopop/jsonschema v0.11.0 h1:tdAVvos5ttrsYLyEuVymkVVK31EFpwnTu5hWiyYLGWA=
github.com/invopop/jsonschema v0.11.0/go.mod h1:ffZ5Km5SWWRAIN6wbDXItl95euhFz2uON45H2qjYt+0=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/jpillora/longestcommon v0.0.0-20161227235612-adb9d91ee629 h1:1dSBUfGlorLAua2CRx0zFN7kQsTpE2DQSmr7rrTNgY8=
github.com/jpillora/longestcommon v0.0.0-20161227235612-adb9d91ee629/go.mod h1:mb5nS4uRANwOJSZj8rlCWAfAcGi72GGMIXx+xGOjA7M=
Expand Down
24 changes: 22 additions & 2 deletions jsonschema/jsonschema.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,34 @@ package jsonschema

import (
"encoding/json"
"reflect"
"log"
"os"
"path"

"github.com/invopop/jsonschema"
)

// Generate returns a formatted JSON schema for the input struct, according to the tags
// defined by https://github.com/invopop/jsonschema
func Generate(a any) ([]byte, error) {
sc := (&jsonschema.Reflector{RequiredFromJSONSchemaTags: true}).ReflectFromType(reflect.TypeOf(a))
sc := (&jsonschema.Reflector{RequiredFromJSONSchemaTags: true}).Reflect(a)
return json.MarshalIndent(sc, "", " ")
}

func GenerateIntoFile(a any, filePath string) {
data, err := Generate(a)
if err != nil {
log.Fatalf("failed to generate JSON schema for %T", a)
}

ensureDir(filePath)
if err = os.WriteFile(filePath, append(data, '\n'), 0o644); err != nil {
log.Fatalf("failed to write file %s: %s", filePath, err.Error())
}
}

func ensureDir(filePath string) {
if err := os.MkdirAll(path.Dir(filePath), os.ModePerm); err != nil {
log.Fatalf("failed to create dir for file %s: %v", filePath, err)
}
}

0 comments on commit 2669d7e

Please sign in to comment.