parent
557788255e
commit
bc595dd024
@ -0,0 +1,45 @@ |
|||||||
|
package base |
||||||
|
|
||||||
|
import ( |
||||||
|
"github.com/mainnika/mongox-go-driver/mongox" |
||||||
|
"github.com/mainnika/mongox-go-driver/mongox/errors" |
||||||
|
"github.com/mongodb/mongo-go-driver/bson/primitive" |
||||||
|
) |
||||||
|
|
||||||
|
// GetID returns source document id
|
||||||
|
func GetID(source interface{}) (id interface{}) { |
||||||
|
|
||||||
|
switch doc := source.(type) { |
||||||
|
case mongox.BaseObjectID: |
||||||
|
return getObjectIdOrGenerate(doc) |
||||||
|
case mongox.BaseString: |
||||||
|
return getStringIdOrPanic(doc) |
||||||
|
default: |
||||||
|
panic(errors.Malformedf("source contains malformed document, %v", source)) |
||||||
|
} |
||||||
|
|
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
func getObjectIdOrGenerate(source mongox.BaseObjectID) (id primitive.ObjectID) { |
||||||
|
|
||||||
|
id = source.GetID() |
||||||
|
if id != primitive.NilObjectID { |
||||||
|
return id |
||||||
|
} |
||||||
|
|
||||||
|
id = primitive.NewObjectID() |
||||||
|
source.SetID(id) |
||||||
|
|
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
func getStringIdOrPanic(source mongox.BaseString) (id string) { |
||||||
|
|
||||||
|
id = source.GetID() |
||||||
|
if id != "" { |
||||||
|
return id |
||||||
|
} |
||||||
|
|
||||||
|
panic(errors.Malformedf("victim contains malformed document, %v", source)) |
||||||
|
} |
Loading…
Reference in new issue