mirror of
https://github.com/mainnika/mongox-go-driver.git
synced 2026-06-12 16:53:35 +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)
|
return getStringIDOrPanic(doc)
|
||||||
case mongox.ObjectBased:
|
case mongox.ObjectBased:
|
||||||
return getObjectOrPanic(doc)
|
return getObjectOrPanic(doc)
|
||||||
|
case mongox.InterfaceBased:
|
||||||
|
return getInterfaceOrPanic(doc)
|
||||||
|
|
||||||
default:
|
default:
|
||||||
panic(fmt.Errorf("source contains malformed document, %v", source))
|
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))
|
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"
|
"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) {
|
func TestGetID(t *testing.T) {
|
||||||
|
|
||||||
type DocWithObjectID struct {
|
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(&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(&DocWithObject{Object: Object(primitive.D{{"1", "2"}})})
|
||||||
GetID(&DocWithString{String: String("foobar")})
|
GetID(&DocWithString{String: String("foobar")})
|
||||||
|
GetID(&DocWithCustomInterface{ID: 420})
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -97,3 +97,8 @@ type ObjectBased interface {
|
|||||||
GetID() primitive.D
|
GetID() primitive.D
|
||||||
SetID(id primitive.D)
|
SetID(id primitive.D)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type InterfaceBased interface {
|
||||||
|
GetID() interface{}
|
||||||
|
SetID(id interface{})
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user