Skip to content

Commit 737db98

Browse files
committed
Implement Scanner and Valuer for model.Role
1 parent c16121f commit 737db98

1 file changed

Lines changed: 34 additions & 1 deletion

File tree

server/model/models.go

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,11 @@
11
package model
22

3-
import "database/sql"
3+
import (
4+
"database/sql"
5+
"database/sql/driver"
6+
"errors"
7+
"fmt"
8+
)
49

510
// User of the application; can be Requester or Workers
611
type User struct {
@@ -51,6 +56,34 @@ type File struct {
5156
// Role represents the position of a app User
5257
type Role string
5358

59+
// Value returns the string value of the Role
60+
func (r Role) Value() (driver.Value, error) {
61+
// TODO: role validation (@dpordomingo)
62+
return string(r), nil
63+
}
64+
65+
// Scan sets the Role with the passed string
66+
func (r *Role) Scan(value interface{}) error {
67+
// TODO: role validation (@dpordomingo)
68+
if value == nil {
69+
*r = Role(Worker)
70+
return nil
71+
}
72+
73+
var bv driver.Value
74+
var err error
75+
if bv, err = driver.String.ConvertValue(value); err == nil {
76+
if v, ok := bv.([]byte); ok {
77+
*r = Role(v)
78+
return nil
79+
}
80+
81+
err = fmt.Errorf("%#v can not be asserted as a string", bv)
82+
}
83+
84+
return errors.New("failed to scan Role; " + err.Error())
85+
}
86+
5487
const (
5588
// Requester is the role of a user that can review assignments, users, stats of experiments...
5689
Requester Role = "requester"

0 commit comments

Comments
 (0)