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