util/sets.go: Use generics Sets
This commit is contained in:
+1
-1
@@ -25,7 +25,7 @@ func (service *simpleAuthenticator) CheckUserPassword(userID, password string) e
|
||||
// FIXME: al momento quando la password è giusta creiamo tutti gli account necessari
|
||||
err := service.database.CreateUser(&db.User{
|
||||
ID: userID,
|
||||
Permissions: make(util.StringSet),
|
||||
Permissions: make(util.Set[string]),
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf(`got "%v" while trying to log as @%s`, err, userID)
|
||||
|
||||
@@ -32,8 +32,8 @@ const (
|
||||
|
||||
// User represents a user in the database.
|
||||
type User struct {
|
||||
ID string `json:"id"`
|
||||
Permissions util.StringSet `json:"permissions"`
|
||||
ID string `json:"id"`
|
||||
Permissions util.Set[string] `json:"permissions"`
|
||||
|
||||
// passwordSaltHash string
|
||||
}
|
||||
@@ -122,7 +122,7 @@ type Database interface {
|
||||
GetRoomOccupiedSeats(roomID string) ([]string, error)
|
||||
GetRoomFreeSeats(roomID string) ([]string, error)
|
||||
|
||||
GetUserSeats(userID string) (util.StringSet, error)
|
||||
GetUserSeats(userID string) (util.Set[string], error)
|
||||
|
||||
OccupySeat(seatID, userID string) error
|
||||
FreeSeat(seatID string) error
|
||||
@@ -161,12 +161,12 @@ func NewInMemoryStore() Database {
|
||||
|
||||
db.users["aziis98"] = &User{
|
||||
ID: "aziis98",
|
||||
Permissions: util.NewStringSet(PermissionAdmin),
|
||||
Permissions: util.NewSet[string](PermissionAdmin),
|
||||
}
|
||||
|
||||
db.users["bachoseven"] = &User{
|
||||
ID: "bachoseven",
|
||||
Permissions: util.NewStringSet(PermissionAdmin),
|
||||
Permissions: util.NewSet[string](PermissionAdmin),
|
||||
}
|
||||
|
||||
return db
|
||||
|
||||
@@ -146,14 +146,14 @@ func (db *memDB) GetRoomFreeSeats(roomID string) ([]string, error) {
|
||||
return seats, nil
|
||||
}
|
||||
|
||||
func (db *memDB) GetUserSeats(userID string) (util.StringSet, error) {
|
||||
func (db *memDB) GetUserSeats(userID string) (util.Set[string], error) {
|
||||
for _, seat := range db.seats {
|
||||
if len(seat.OccupiedBy) > 0 && seat.OccupiedBy[0] == userID {
|
||||
return util.NewStringSet(seat.ID), nil
|
||||
return util.NewSet[string](seat.ID), nil
|
||||
}
|
||||
}
|
||||
|
||||
return util.NewStringSet(), nil
|
||||
return util.NewSet[string](), nil
|
||||
}
|
||||
|
||||
func (db *memDB) OccupySeat(seatID, userID string) error {
|
||||
|
||||
+13
-15
@@ -4,12 +4,10 @@ import "encoding/json"
|
||||
|
||||
type present struct{}
|
||||
|
||||
// Waiting for Go 18...
|
||||
// type Set[T comparable] map[T]present
|
||||
type StringSet map[string]present
|
||||
type Set[T comparable] map[T]present
|
||||
|
||||
func NewStringSet(elements ...string) StringSet {
|
||||
set := StringSet{}
|
||||
func NewSet[T comparable](elements ...T) Set[T] {
|
||||
set := Set[T]{}
|
||||
|
||||
for _, elem := range elements {
|
||||
set.Add(elem)
|
||||
@@ -18,12 +16,12 @@ func NewStringSet(elements ...string) StringSet {
|
||||
return set
|
||||
}
|
||||
|
||||
func (set StringSet) Has(value string) bool {
|
||||
func (set Set[T]) Has(value T) bool {
|
||||
_, present := set[value]
|
||||
return present
|
||||
}
|
||||
|
||||
func (set StringSet) HasAny(values ...string) bool {
|
||||
func (set Set[T]) HasAny(values ...T) bool {
|
||||
for _, value := range values {
|
||||
if _, present := set[value]; present {
|
||||
return true
|
||||
@@ -32,7 +30,7 @@ func (set StringSet) HasAny(values ...string) bool {
|
||||
return false
|
||||
}
|
||||
|
||||
func (set StringSet) Contains(other StringSet) bool {
|
||||
func (set Set[T]) Contains(other Set[T]) bool {
|
||||
for v := range other {
|
||||
if !set.Has(v) {
|
||||
return false
|
||||
@@ -41,16 +39,16 @@ func (set StringSet) Contains(other StringSet) bool {
|
||||
return true
|
||||
}
|
||||
|
||||
func (set StringSet) Add(value string) {
|
||||
func (set Set[T]) Add(value T) {
|
||||
set[value] = present{}
|
||||
}
|
||||
|
||||
func (set StringSet) Remove(value string) {
|
||||
func (set Set[T]) Remove(value T) {
|
||||
delete(set, value)
|
||||
}
|
||||
|
||||
func (set StringSet) Elements() []string {
|
||||
elements := []string{}
|
||||
func (set Set[T]) Elements() []T {
|
||||
elements := []T{}
|
||||
|
||||
for elem := range set {
|
||||
elements = append(elements, elem)
|
||||
@@ -59,12 +57,12 @@ func (set StringSet) Elements() []string {
|
||||
return elements
|
||||
}
|
||||
|
||||
func (set StringSet) MarshalJSON() ([]byte, error) {
|
||||
func (set Set[T]) MarshalJSON() ([]byte, error) {
|
||||
return json.Marshal(set.Elements())
|
||||
}
|
||||
|
||||
func (set StringSet) UnmarshalJSON(data []byte) error {
|
||||
elements := []string{}
|
||||
func (set Set[T]) UnmarshalJSON(data []byte) error {
|
||||
elements := []T{}
|
||||
if err := json.Unmarshal(data, &elements); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user