mirror of
https://github.com/ent/ent.git
synced 2026-03-05 19:35:23 +03:00
schema/field: ensure DefaultFunc argument is type func (#2884)
This commit is contained in:
@@ -79,7 +79,7 @@ func JSON(name string, typ any) *jsonBuilder {
|
||||
}}
|
||||
t := reflect.TypeOf(typ)
|
||||
if t == nil {
|
||||
b.desc.Err = errors.New("expect a Go value as JSON type, but got nil")
|
||||
b.desc.Err = errors.New("expect a Go value as JSON type but got nil")
|
||||
return b
|
||||
}
|
||||
b.desc.Info.Ident = t.String()
|
||||
@@ -237,6 +237,9 @@ func (b *stringBuilder) Default(s string) *stringBuilder {
|
||||
// field.String("cuid").
|
||||
// DefaultFunc(cuid.New)
|
||||
func (b *stringBuilder) DefaultFunc(fn any) *stringBuilder {
|
||||
if t := reflect.TypeOf(fn); t.Kind() != reflect.Func {
|
||||
b.desc.Err = fmt.Errorf("field.String(%q).DefaultFunc expects func but got %s", b.desc.Name, t.Kind())
|
||||
}
|
||||
b.desc.Default = fn
|
||||
return b
|
||||
}
|
||||
@@ -528,6 +531,9 @@ func (b *bytesBuilder) Default(v []byte) *bytesBuilder {
|
||||
// field.Bytes("cuid").
|
||||
// DefaultFunc(cuid.New)
|
||||
func (b *bytesBuilder) DefaultFunc(fn any) *bytesBuilder {
|
||||
if t := reflect.TypeOf(fn); t.Kind() != reflect.Func {
|
||||
b.desc.Err = fmt.Errorf("field.Bytes(%q).DefaultFunc expects func but got %s", b.desc.Name, t.Kind())
|
||||
}
|
||||
b.desc.Default = fn
|
||||
return b
|
||||
}
|
||||
|
||||
@@ -282,6 +282,9 @@ func TestBytes_DefaultFunc(t *testing.T) {
|
||||
f4 := func() net.IPMask { return net.IPMask("ffff:ff80::") }
|
||||
fd = field.Bytes("ip").GoType(net.IP("127.0.0.1")).DefaultFunc(f4).Descriptor()
|
||||
assert.Error(t, fd.Err, "`var _ net.IP = f4()` should fail")
|
||||
|
||||
fd = field.Bytes("ip").GoType(net.IP("127.0.0.1")).DefaultFunc(net.IP("127.0.0.1")).Descriptor()
|
||||
assert.EqualError(t, fd.Err, `field.Bytes("ip").DefaultFunc expects func but got slice`)
|
||||
}
|
||||
|
||||
func TestString_DefaultFunc(t *testing.T) {
|
||||
@@ -304,6 +307,9 @@ func TestString_DefaultFunc(t *testing.T) {
|
||||
f4 := func() S { return "" }
|
||||
fd = field.String("str").GoType(http.Dir("/tmp")).DefaultFunc(f4).Descriptor()
|
||||
assert.Error(t, fd.Err, "`var _ http.Dir = f4()` should fail")
|
||||
|
||||
fd = field.String("str").GoType(http.Dir("/tmp")).DefaultFunc("/tmp").Descriptor()
|
||||
assert.EqualError(t, fd.Err, `field.String("str").DefaultFunc expects func but got string`)
|
||||
}
|
||||
|
||||
type VString string
|
||||
@@ -522,7 +528,7 @@ func TestJSON(t *testing.T) {
|
||||
assert.Equal(t, "net/url", fd.Info.PkgPath)
|
||||
assert.Equal(t, "url", fd.Info.PkgName)
|
||||
fd = field.JSON("addr", net.Addr(nil)).Descriptor()
|
||||
assert.EqualError(t, fd.Err, "expect a Go value as JSON type, but got nil")
|
||||
assert.EqualError(t, fd.Err, "expect a Go value as JSON type but got nil")
|
||||
}
|
||||
|
||||
func TestField_Tag(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user