From 9fb3094b874df03cc9f490047170893a0e837e92 Mon Sep 17 00:00:00 2001 From: Nikita Tokarchuk Date: Wed, 22 Jul 2020 04:45:32 +0200 Subject: [PATCH] Use reflect2 --- go.mod | 2 ++ go.sum | 7 +++++++ mongox/base/getid.go | 4 ++-- mongox/database/deleteone.go | 4 ++-- mongox/query/compose.go | 4 ++-- mongox/utils/isnil.go | 23 ----------------------- mongox/utils/isnil_test.go | 32 -------------------------------- 7 files changed, 15 insertions(+), 61 deletions(-) delete mode 100644 mongox/utils/isnil.go delete mode 100644 mongox/utils/isnil_test.go diff --git a/go.mod b/go.mod index 9b6e5d6..1cabadd 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,8 @@ module github.com/mainnika/mongox-go-driver/v2 require ( github.com/google/go-cmp v0.3.0 // indirect github.com/klauspost/compress v1.10.1 // indirect + github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect + github.com/modern-go/reflect2 v1.0.1 github.com/pkg/errors v0.9.1 // indirect github.com/stretchr/testify v1.5.1 github.com/xdg/stringprep v1.0.0 // indirect diff --git a/go.sum b/go.sum index 7cdf22d..213a177 100644 --- a/go.sum +++ b/go.sum @@ -44,11 +44,17 @@ github.com/klauspost/compress v1.10.1 h1:a/QY0o9S6wCi0XhxaMX/QmusicNUqCqFugR6WKP github.com/klauspost/compress v1.10.1/go.mod h1:aoV0uJVorq1K+umq18yTdKaF57EivdYsUV+/s2qKfXs= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= +github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= +github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/markbates/oncer v0.0.0-20181203154359-bf2de49a0be2/go.mod h1:Ld9puTsIW75CHf65OeIOkyKbteujpZVXDpWK6YGZbxE= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= +github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= +github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= +github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= github.com/pelletier/go-toml v1.4.0/go.mod h1:PN7xzY2wHTK0K9p34ErDQMlFxa51Fk0OUruD3k1mMwo= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= @@ -113,6 +119,7 @@ golang.org/x/tools v0.0.0-20190416151739-9c9e1878f421/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190420181800-aa740d480789/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190531172133-b3315ee88b7d/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY= gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw= diff --git a/mongox/base/getid.go b/mongox/base/getid.go index f5f4bd8..b916bbd 100644 --- a/mongox/base/getid.go +++ b/mongox/base/getid.go @@ -3,10 +3,10 @@ package base import ( "fmt" + "github.com/modern-go/reflect2" "go.mongodb.org/mongo-driver/bson/primitive" "github.com/mainnika/mongox-go-driver/v2/mongox" - "github.com/mainnika/mongox-go-driver/v2/mongox/utils" ) // GetID returns source document id @@ -63,7 +63,7 @@ func getObjectOrPanic(source mongox.JSONBased) (id primitive.D) { func getInterfaceOrPanic(source mongox.InterfaceBased) (id interface{}) { id = source.GetID() - if !utils.IsNil(id) { + if !reflect2.IsNil(id) { return id } diff --git a/mongox/database/deleteone.go b/mongox/database/deleteone.go index b0e633e..dc9a3ae 100644 --- a/mongox/database/deleteone.go +++ b/mongox/database/deleteone.go @@ -4,12 +4,12 @@ import ( "fmt" "time" + "github.com/modern-go/reflect2" "go.mongodb.org/mongo-driver/bson/primitive" "go.mongodb.org/mongo-driver/mongo/options" "github.com/mainnika/mongox-go-driver/v2/mongox/base" "github.com/mainnika/mongox-go-driver/v2/mongox/query" - "github.com/mainnika/mongox-go-driver/v2/mongox/utils" ) // DeleteOne removes a document from a database and then returns it into target @@ -22,7 +22,7 @@ func (d *Database) DeleteOne(target interface{}, filters ...interface{}) (err er opts.Sort = composed.Sorter() - if !utils.IsNil(target) { + if !reflect2.IsNil(target) { composed.And(primitive.M{"_id": base.GetID(target)}) } diff --git a/mongox/query/compose.go b/mongox/query/compose.go index e64ff88..2d7f88e 100644 --- a/mongox/query/compose.go +++ b/mongox/query/compose.go @@ -3,11 +3,11 @@ package query import ( "fmt" + "github.com/modern-go/reflect2" "go.mongodb.org/mongo-driver/bson" "go.mongodb.org/mongo-driver/bson/primitive" "github.com/mainnika/mongox-go-driver/v2/mongox/base/protection" - "github.com/mainnika/mongox-go-driver/v2/mongox/utils" ) // Compose is a function to compose filters into a single query @@ -27,7 +27,7 @@ func Compose(filters ...interface{}) (query *Query) { // Push applies single filter to a query func Push(q *Query, f interface{}) (ok bool) { - if utils.IsNil(f) { + if reflect2.IsNil(f) { return true } diff --git a/mongox/utils/isnil.go b/mongox/utils/isnil.go deleted file mode 100644 index 3cd4791..0000000 --- a/mongox/utils/isnil.go +++ /dev/null @@ -1,23 +0,0 @@ -package utils - -import ( - "unsafe" -) - -// IsNil function evaluates the interface value to nil -func IsNil(i interface{}) (isNil bool) { - - type iface struct { - _ unsafe.Pointer - ptr unsafe.Pointer - } - - unpacked := (*iface)(unsafe.Pointer(&i)) - if unpacked.ptr == nil { - isNil = true - return - } - - isNil = *(*unsafe.Pointer)(unpacked.ptr) == nil - return -} diff --git a/mongox/utils/isnil_test.go b/mongox/utils/isnil_test.go deleted file mode 100644 index a6d1ced..0000000 --- a/mongox/utils/isnil_test.go +++ /dev/null @@ -1,32 +0,0 @@ -package utils - -import ( - "testing" - - "github.com/stretchr/testify/assert" -) - -func TestIsNil(t *testing.T) { - - testvalues := []struct { - i interface{} - isnil bool - }{ - {nil, true}, - {(*string)(nil), true}, - {([]string)(nil), true}, - {(map[string]string)(nil), true}, - {(func() bool)(nil), true}, - {(chan func() bool)(nil), true}, - {"", true}, - {0, true}, - {append(([]string)(nil), ""), false}, - {[]string{}, false}, - {1, false}, - {"1", false}, - } - - for _, tt := range testvalues { - assert.Equal(t, tt.isnil, IsNil(tt.i)) - } -}