Add custom interface base type

This commit is contained in:
Nikita Tokarchuk
2020-03-05 00:00:35 +01:00
parent 45a41c6c6c
commit f3adfb039a
3 changed files with 31 additions and 0 deletions
+13
View File
@@ -18,6 +18,9 @@ func GetID(source interface{}) (id interface{}) {
return getStringIDOrPanic(doc)
case mongox.ObjectBased:
return getObjectOrPanic(doc)
case mongox.InterfaceBased:
return getInterfaceOrPanic(doc)
default:
panic(fmt.Errorf("source contains malformed document, %v", source))
}
@@ -55,3 +58,13 @@ func getObjectOrPanic(source mongox.ObjectBased) (id primitive.D) {
panic(fmt.Errorf("source contains malformed document, %v", source))
}
func getInterfaceOrPanic(source mongox.InterfaceBased) (id interface{}) {
id = source.GetID()
if id != nil {
return id
}
panic(fmt.Errorf("source contains malformed document, %v", source))
}
+13
View File
@@ -6,6 +6,18 @@ import (
"go.mongodb.org/mongo-driver/bson/primitive"
)
type DocWithCustomInterface struct {
ID int `bson:"_id" json:"_id" collection:"4"`
}
func (d *DocWithCustomInterface) GetID() interface{} {
return d.ID
}
func (d *DocWithCustomInterface) SetID(id interface{}) {
panic("not implemented")
}
func TestGetID(t *testing.T) {
type DocWithObjectID struct {
@@ -21,4 +33,5 @@ func TestGetID(t *testing.T) {
GetID(&DocWithObjectID{ObjectID: ObjectID([12]byte{1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2})})
GetID(&DocWithObject{Object: Object(primitive.D{{"1", "2"}})})
GetID(&DocWithString{String: String("foobar")})
GetID(&DocWithCustomInterface{ID: 420})
}