mirror of
https://github.com/mainnika/mongox-go-driver.git
synced 2026-05-22 15:53:36 +00:00
Add custom interface base type
This commit is contained in:
@@ -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))
|
||||
}
|
||||
|
||||
@@ -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})
|
||||
}
|
||||
|
||||
@@ -97,3 +97,8 @@ type ObjectBased interface {
|
||||
GetID() primitive.D
|
||||
SetID(id primitive.D)
|
||||
}
|
||||
|
||||
type InterfaceBased interface {
|
||||
GetID() interface{}
|
||||
SetID(id interface{})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user