1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
package api
import (
"reflect"
)
type Object interface {
DeepCopyObject() Object
}
type Spec interface {
Object
GetName() string
GetGroup() string
GetPathMethod(Action) (string, string)
}
type ListSpec interface {
Spec
Initializer
GetItems() interface{}
Len() int
Index(int) interface{}
}
type CountableListSpec interface {
ListSpec
SetCount(int32)
GetCount() int32
GetMaxLimit() int32
AddItem(interface{}) bool
ClearItems()
}
type Initializer interface {
Init()
}
func DeepCopySpec(s Spec) Spec {
if s == nil || reflect.ValueOf(s).IsNil() {
return nil
}
ret, ok := s.DeepCopyObject().(Spec)
if !ok {
panic("s is not Spec")
}
return ret
}
func DeepCopyListSpec(s ListSpec) ListSpec {
if s == nil || reflect.ValueOf(s).IsNil() {
return nil
}
ret, ok := s.DeepCopyObject().(ListSpec)
if !ok {
panic("s is not ListSpec")
}
return ret
}
func DeepCopyCountableListSpec(s CountableListSpec) CountableListSpec {
if s == nil || reflect.ValueOf(s).IsNil() {
return nil
}
ret, ok := s.DeepCopyObject().(CountableListSpec)
if !ok {
panic("s is not CountableListSpec")
}
return ret
}
|