54 lines
810 B
Go
54 lines
810 B
Go
package sqlType
|
|
|
|
import "encoding/json"
|
|
|
|
type Set map[string]struct{}
|
|
|
|
func (s Set) MarshalJSON() ([]byte, error) {
|
|
array := make([]string, 0)
|
|
for name := range s {
|
|
array = append(array, name)
|
|
}
|
|
|
|
return json.Marshal(array)
|
|
}
|
|
|
|
func (s *Set) UnmarshalJSON(b []byte) error {
|
|
array := make([]string, 0)
|
|
if err := json.Unmarshal(b, &array); err != nil {
|
|
return err
|
|
}
|
|
|
|
set := make(map[string]struct{})
|
|
|
|
for _, name := range array {
|
|
set[name] = struct{}{}
|
|
}
|
|
|
|
*s = set
|
|
return nil
|
|
}
|
|
|
|
func (s Set) ToStringSlice() []string {
|
|
var (
|
|
result = make([]string, 0, len(s))
|
|
)
|
|
|
|
for key := range s {
|
|
result = append(result, key)
|
|
}
|
|
|
|
return result
|
|
}
|
|
|
|
func (s *Set) FromStringSlice(ss *[]string) {
|
|
if s == nil {
|
|
m := make(Set)
|
|
s = &m
|
|
}
|
|
|
|
for idx := range *(ss) {
|
|
(*s)[(*ss)[idx]] = struct{}{}
|
|
}
|
|
}
|