2023-09-23 21:27:34 +00:00
package opt
import (
"fmt"
"encoding/json"
)
var _ json . Unmarshaler = new ( Optional [ bool ] )
var _ json . Unmarshaler = new ( Optional [ string ] )
// UnmarshalJSON makes it so json.Unmarshaler is implemented.
func ( receiver * Optional [ T ] ) UnmarshalJSON ( data [ ] byte ) error {
switch interface { } ( receiver . value ) . ( type ) {
2023-09-24 21:59:54 +00:00
case bool , string , json . Unmarshaler :
2023-09-23 21:27:34 +00:00
// these are OK.
default :
2023-09-24 21:59:54 +00:00
return fmt . Errorf ( "cannot unmarshal into something of type %T from JSON because parameterized type is ‘ %T’ rather than ‘ bool’ , ‘ string’ , or ‘ json.Unmarshaler’ " , receiver , receiver . value )
2023-09-23 21:27:34 +00:00
}
{
var dst T
err := json . Unmarshal ( data , & dst )
if nil != err {
return err
}
* receiver = Something ( dst )
}
return nil
}