mirror of
https://github.com/metabarcoding/obitools4.git
synced 2025-06-29 16:20:46 +00:00
Replace the CopyMap function by the MustFillMap and adds a InterfaceToIntMap function
This commit is contained in:
1
go.mod
1
go.mod
@ -14,6 +14,7 @@ require (
|
|||||||
require (
|
require (
|
||||||
github.com/KyleBanks/depth v1.2.1 // indirect
|
github.com/KyleBanks/depth v1.2.1 // indirect
|
||||||
github.com/akualab/gjoa v0.0.0-20150423185904-0953495dbcc7 // indirect
|
github.com/akualab/gjoa v0.0.0-20150423185904-0953495dbcc7 // indirect
|
||||||
|
github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df // indirect
|
||||||
github.com/golang/glog v1.0.0 // indirect
|
github.com/golang/glog v1.0.0 // indirect
|
||||||
github.com/klauspost/compress v1.15.9 // indirect
|
github.com/klauspost/compress v1.15.9 // indirect
|
||||||
github.com/klauspost/pgzip v1.2.5 // indirect
|
github.com/klauspost/pgzip v1.2.5 // indirect
|
||||||
|
2
go.sum
2
go.sum
@ -10,6 +10,8 @@ github.com/PaesslerAG/jsonpath v0.1.0 h1:gADYeifvlqK3R3i2cR5B4DGgxLXIPb3TRTH1mGi
|
|||||||
github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV0grWtFzq1Y8=
|
github.com/PaesslerAG/jsonpath v0.1.0/go.mod h1:4BzmtoM/PI8fPO4aQGIusjGxGir2BzcV0grWtFzq1Y8=
|
||||||
github.com/akualab/gjoa v0.0.0-20150423185904-0953495dbcc7 h1:v8r5rCWpphm5f+yaKDQvVKM46jj0SB7iDUTVS1MHSAg=
|
github.com/akualab/gjoa v0.0.0-20150423185904-0953495dbcc7 h1:v8r5rCWpphm5f+yaKDQvVKM46jj0SB7iDUTVS1MHSAg=
|
||||||
github.com/akualab/gjoa v0.0.0-20150423185904-0953495dbcc7/go.mod h1:zhxCkmvf40lxgYc6aJuF6AOwfzuvFIANF9OQaMz5xNs=
|
github.com/akualab/gjoa v0.0.0-20150423185904-0953495dbcc7/go.mod h1:zhxCkmvf40lxgYc6aJuF6AOwfzuvFIANF9OQaMz5xNs=
|
||||||
|
github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df h1:GSoSVRLoBaFpOOds6QyY1L8AX7uoY+Ln3BHc22W40X0=
|
||||||
|
github.com/barkimedes/go-deepcopy v0.0.0-20220514131651-17c30cfc62df/go.mod h1:hiVxq5OP2bUGBRNS3Z/bt/reCLFNbdcST6gISi1fiOM=
|
||||||
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
|
||||||
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
|
||||||
|
@ -3,12 +3,13 @@ package goutils
|
|||||||
import (
|
import (
|
||||||
"bufio"
|
"bufio"
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/gob"
|
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
"io"
|
"io"
|
||||||
"os"
|
"os"
|
||||||
"reflect"
|
"reflect"
|
||||||
"sync"
|
"sync"
|
||||||
|
|
||||||
|
"github.com/barkimedes/go-deepcopy"
|
||||||
)
|
)
|
||||||
|
|
||||||
// NotAnInteger defines a new type of Error : "NotAnInteger"
|
// NotAnInteger defines a new type of Error : "NotAnInteger"
|
||||||
@ -60,6 +61,44 @@ func InterfaceToInt(i interface{}) (val int, err error) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// NotABoolean defines a new type of Error : "NotAMapInt"
|
||||||
|
type NotAMapInt struct {
|
||||||
|
message string
|
||||||
|
}
|
||||||
|
|
||||||
|
// Error() retreives the error message associated to the "NotAnInteger"
|
||||||
|
// error. Tha addition of that Error message make the "NotAnInteger"
|
||||||
|
// complying with the error interface
|
||||||
|
func (m *NotAMapInt) Error() string {
|
||||||
|
return m.message
|
||||||
|
}
|
||||||
|
|
||||||
|
func InterfaceToIntMap(i interface{}) (val map[string]int, err error) {
|
||||||
|
err = nil
|
||||||
|
|
||||||
|
switch i := i.(type) {
|
||||||
|
case map[string]int:
|
||||||
|
val = i
|
||||||
|
case map[string]interface{}:
|
||||||
|
val = make(map[string]int, len(i))
|
||||||
|
for k, v := range i {
|
||||||
|
val[k], err = InterfaceToInt(v)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
}
|
||||||
|
case map[string]float64:
|
||||||
|
val = make(map[string]int, len(i))
|
||||||
|
for k, v := range i {
|
||||||
|
val[k] = int(v)
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
err = &NotAMapInt{"value attribute cannot be casted to a map[string]int"}
|
||||||
|
}
|
||||||
|
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// NotABoolean defines a new type of Error : "NotABoolean"
|
// NotABoolean defines a new type of Error : "NotABoolean"
|
||||||
type NotABoolean struct {
|
type NotABoolean struct {
|
||||||
message string
|
message string
|
||||||
@ -122,14 +161,14 @@ func CastableToInt(i interface{}) bool {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// "CopyMap copies the contents of a map[string]interface{} to another map[string]interface{}."
|
func MustFillMap(dest, src map[string]interface{}) {
|
||||||
//
|
|
||||||
// The function uses the gob package to encode the source map into a buffer and then decode the buffer
|
for k, v := range src {
|
||||||
// into the destination map
|
if IsAMap(v) || IsASlice(v) || IsAnArray(v) {
|
||||||
func CopyMap(dest, src map[string]interface{}) {
|
v = deepcopy.MustAnything(v)
|
||||||
buf := new(bytes.Buffer)
|
}
|
||||||
gob.NewEncoder(buf).Encode(src)
|
dest[k] = v
|
||||||
gob.NewDecoder(buf).Decode(&dest)
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Read a whole file into the memory and store it as array of lines
|
// Read a whole file into the memory and store it as array of lines
|
||||||
|
Reference in New Issue
Block a user