Add typed spell validation strategies
This commit is contained in:
@@ -58,6 +58,19 @@ func (c *Codec) EncodeCandidate(value dnd.SpellList) ([]byte, error) {
|
||||
}
|
||||
|
||||
func (c *Codec) Decode(content []byte) (dnd.SpellList, error) {
|
||||
value, err := c.DecodeCandidate(content)
|
||||
if err != nil {
|
||||
return dnd.SpellList{}, err
|
||||
}
|
||||
if err := validate(value); err != nil {
|
||||
return dnd.SpellList{}, fmt.Errorf("decode dnd spell list: %w", err)
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
// DecodeCandidate reads the durable representation before semantic validators
|
||||
// have approved it on the temporary raw runner path.
|
||||
func (c *Codec) DecodeCandidate(content []byte) (dnd.SpellList, error) {
|
||||
decoder := json.NewDecoder(bytes.NewReader(content))
|
||||
decoder.DisallowUnknownFields()
|
||||
var value dnd.SpellList
|
||||
@@ -68,9 +81,6 @@ func (c *Codec) Decode(content []byte) (dnd.SpellList, error) {
|
||||
if err := decoder.Decode(&trailing); err != io.EOF {
|
||||
return dnd.SpellList{}, fmt.Errorf("decode dnd spell list: multiple JSON values")
|
||||
}
|
||||
if err := validate(value); err != nil {
|
||||
return dnd.SpellList{}, fmt.Errorf("decode dnd spell list: %w", err)
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user