mirror of
https://github.com/ent/ent.git
synced 2026-03-05 19:35:23 +03:00
schema/field: support default values for json and other
This commit is contained in:
committed by
Ariel Mashraki
parent
5c76254b5c
commit
e687246f7a
@@ -732,6 +732,28 @@ func (b *jsonBuilder) Annotations(annotations ...schema.Annotation) *jsonBuilder
|
||||
return b
|
||||
}
|
||||
|
||||
// Default sets the default value of the field. For example:
|
||||
//
|
||||
// field.JSON("dirs", []http.Dir{}).
|
||||
// // A static default value.
|
||||
// Default([]http.Dir{"/tmp"})
|
||||
//
|
||||
// field.JSON("dirs", []http.Dir{}).
|
||||
// // A function for generating the default value.
|
||||
// Default(DefaultDirs)
|
||||
//
|
||||
func (b *jsonBuilder) Default(v interface{}) *jsonBuilder {
|
||||
b.desc.Default = v
|
||||
switch fieldT, defaultT := b.desc.Info.RType.rtype, reflect.TypeOf(v); {
|
||||
case fieldT == defaultT:
|
||||
case defaultT.Kind() == reflect.Func:
|
||||
b.desc.checkDefaultFunc(b.desc.Info.RType.rtype)
|
||||
default:
|
||||
b.desc.Err = fmt.Errorf("expect type (func() %[1]s) or (%[1]s) for other default value", b.desc.Info)
|
||||
}
|
||||
return b
|
||||
}
|
||||
|
||||
// Descriptor implements the ent.Field interface by returning its descriptor.
|
||||
func (b *jsonBuilder) Descriptor() *Descriptor {
|
||||
return b.desc
|
||||
|
||||
@@ -467,13 +467,31 @@ func TestJSON(t *testing.T) {
|
||||
|
||||
fd = field.Strings("strings").
|
||||
Optional().
|
||||
Default([]string{"a", "b"}).
|
||||
Descriptor()
|
||||
assert.NoError(t, fd.Err)
|
||||
assert.True(t, fd.Optional)
|
||||
assert.Empty(t, fd.Info.PkgPath)
|
||||
assert.Equal(t, "strings", fd.Name)
|
||||
assert.Equal(t, []string{"a", "b"}, fd.Default)
|
||||
assert.Equal(t, field.TypeJSON, fd.Info.Type)
|
||||
assert.Equal(t, "[]string", fd.Info.String())
|
||||
|
||||
fd = field.JSON("dirs", []http.Dir{}).
|
||||
Default([]http.Dir{"a", "b"}).
|
||||
Descriptor()
|
||||
assert.NoError(t, fd.Err)
|
||||
fd = field.JSON("dirs", []http.Dir{}).
|
||||
Default(func() []http.Dir {
|
||||
return []http.Dir{"/tmp"}
|
||||
}).
|
||||
Descriptor()
|
||||
assert.NoError(t, fd.Err)
|
||||
fd = field.JSON("dirs", []http.Dir{}).
|
||||
Default([]string{"a", "b"}).
|
||||
Descriptor()
|
||||
assert.Error(t, fd.Err)
|
||||
|
||||
fd = field.JSON("values", &url.Values{}).Descriptor()
|
||||
assert.Equal(t, "net/url", fd.Info.PkgPath)
|
||||
fd = field.JSON("values", []url.Values{}).Descriptor()
|
||||
|
||||
Reference in New Issue
Block a user