default, required added
This commit is contained in:
parent
430e8dc498
commit
178b12d303
21
Gopkg.lock
generated
Normal file
21
Gopkg.lock
generated
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# This file is autogenerated, do not edit; changes may be undone by the next 'dep ensure'.
|
||||||
|
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
branch = "master"
|
||||||
|
name = "git.loafle.net/overflow/util-go"
|
||||||
|
packages = ["reflect"]
|
||||||
|
revision = "fae2846a85aad314ee44957d428478fbe800045f"
|
||||||
|
|
||||||
|
[[projects]]
|
||||||
|
name = "gopkg.in/yaml.v2"
|
||||||
|
packages = ["."]
|
||||||
|
revision = "5420a8b6744d3b0345ab293f6fcba19c978f1183"
|
||||||
|
version = "v2.2.1"
|
||||||
|
|
||||||
|
[solve-meta]
|
||||||
|
analyzer-name = "dep"
|
||||||
|
analyzer-version = 1
|
||||||
|
inputs-digest = "8c01a65650b6ec8ab959868d85ad4a1a857328764f44e27b654d8916c1f65d6f"
|
||||||
|
solver-name = "gps-cdcl"
|
||||||
|
solver-version = 1
|
38
Gopkg.toml
Normal file
38
Gopkg.toml
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
# Gopkg.toml example
|
||||||
|
#
|
||||||
|
# Refer to https://github.com/golang/dep/blob/master/docs/Gopkg.toml.md
|
||||||
|
# for detailed Gopkg.toml documentation.
|
||||||
|
#
|
||||||
|
# required = ["github.com/user/thing/cmd/thing"]
|
||||||
|
# ignored = ["github.com/user/project/pkgX", "bitbucket.org/user/project/pkgA/pkgY"]
|
||||||
|
#
|
||||||
|
# [[constraint]]
|
||||||
|
# name = "github.com/user/project"
|
||||||
|
# version = "1.0.0"
|
||||||
|
#
|
||||||
|
# [[constraint]]
|
||||||
|
# name = "github.com/user/project2"
|
||||||
|
# branch = "dev"
|
||||||
|
# source = "github.com/myfork/project2"
|
||||||
|
#
|
||||||
|
# [[override]]
|
||||||
|
# name = "github.com/x/y"
|
||||||
|
# version = "2.4.0"
|
||||||
|
#
|
||||||
|
# [prune]
|
||||||
|
# non-go = false
|
||||||
|
# go-tests = true
|
||||||
|
# unused-packages = true
|
||||||
|
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
branch = "master"
|
||||||
|
name = "git.loafle.net/overflow/util-go"
|
||||||
|
|
||||||
|
[[constraint]]
|
||||||
|
name = "gopkg.in/yaml.v2"
|
||||||
|
version = "2.2.1"
|
||||||
|
|
||||||
|
[prune]
|
||||||
|
go-tests = true
|
||||||
|
unused-packages = true
|
23
registry.go
23
registry.go
|
@ -7,6 +7,7 @@ import (
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
our "git.loafle.net/overflow/util-go/reflect"
|
our "git.loafle.net/overflow/util-go/reflect"
|
||||||
|
yaml "gopkg.in/yaml.v2"
|
||||||
)
|
)
|
||||||
|
|
||||||
type Registry interface {
|
type Registry interface {
|
||||||
|
@ -160,6 +161,28 @@ func (r *AnnotationRegistry) getAnnotation(f *reflect.StructField) (map[reflect.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_v := reflect.Indirect(reflect.ValueOf(i))
|
||||||
|
for index := 0; index < _v.NumField(); index++ {
|
||||||
|
_f := _v.Field(index)
|
||||||
|
_fs := def.rt.Field(index)
|
||||||
|
|
||||||
|
if !_f.CanAddr() || !_f.CanInterface() {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if isBlank := reflect.DeepEqual(_f.Interface(), reflect.Zero(_f.Type()).Interface()); isBlank {
|
||||||
|
// Set default configuration if blank
|
||||||
|
if value := _fs.Tag.Get(DefaultTag); value != "" {
|
||||||
|
if err := yaml.Unmarshal([]byte(value), _f.Addr().Interface()); err != nil {
|
||||||
|
return nil, fmt.Errorf("Unmarshal failed %v", err)
|
||||||
|
}
|
||||||
|
} else if _fs.Tag.Get(RequiredTag) == "true" {
|
||||||
|
// return error if it is required but blank
|
||||||
|
return nil, fmt.Errorf("%s is required, but blank", _fs.Name)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
annotations[def.t] = i
|
annotations[def.t] = i
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -3,18 +3,13 @@ package annotation
|
||||||
import (
|
import (
|
||||||
"reflect"
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
di "git.loafle.net/overflow/di-go"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
var InjectableAnnotationType = reflect.TypeOf((*InjectableAnnotation)(nil))
|
var InjectableAnnotationType = reflect.TypeOf((*InjectableAnnotation)(nil))
|
||||||
|
|
||||||
type InjectableAnnotation struct {
|
type InjectableAnnotation struct {
|
||||||
Annotation `@name:"@Injectable"`
|
Annotation `@name:"@Injectable"`
|
||||||
Name string `json:"name" @default:""`
|
Name string `json:"name" @default:"" @required:"false"`
|
||||||
InitMethod string `json:"initMethod"`
|
|
||||||
DestroyMethod string `json:"destroyMethod"`
|
|
||||||
Scope di.ScopeType `json:"scope"`
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var InjectableServiceType = reflect.TypeOf((*InjectableService)(nil))
|
var InjectableServiceType = reflect.TypeOf((*InjectableService)(nil))
|
||||||
|
@ -102,6 +97,11 @@ func TestAnnotationRegistry_Register(t *testing.T) {
|
||||||
if err := r.Register(tt.args.t); (err != nil) != tt.wantErr {
|
if err := r.Register(tt.args.t); (err != nil) != tt.wantErr {
|
||||||
t.Errorf("AnnotationRegistry.Register() error = %v, wantErr %v", err, tt.wantErr)
|
t.Errorf("AnnotationRegistry.Register() error = %v, wantErr %v", err, tt.wantErr)
|
||||||
}
|
}
|
||||||
|
a, err := r.GetTypeAnnotation(InjectableServiceType, InjectableAnnotationType)
|
||||||
|
if nil != err {
|
||||||
|
t.Error(err)
|
||||||
|
}
|
||||||
|
t.Log(a)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user