35 lines
566 B
Go
35 lines
566 B
Go
package commons
|
|
|
|
import (
|
|
"encoding/json"
|
|
"log"
|
|
|
|
"github.com/ianlancetaylor/jsonschema"
|
|
"github.com/ianlancetaylor/jsonschema/draft7"
|
|
)
|
|
|
|
func Validate(schema string, dataAny any) error {
|
|
data := StructToMapRecursive(dataAny)
|
|
|
|
var v any
|
|
if err := json.Unmarshal([]byte(schema), &v); err != nil {
|
|
log.Printf("Failed to decode json %#v", err)
|
|
|
|
return err
|
|
}
|
|
|
|
vldtor, err := jsonschema.SchemaFromJSON(draft7.SchemaID, nil, v)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// validate
|
|
valid := vldtor.Validate(data)
|
|
|
|
if valid != nil {
|
|
return valid
|
|
}
|
|
|
|
return nil
|
|
}
|