diff options
Diffstat (limited to 'util')
-rw-r--r-- | util/hash.go | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/util/hash.go b/util/hash.go index 088fd70e..df0a83b8 100644 --- a/util/hash.go +++ b/util/hash.go @@ -1,3 +1,43 @@ package util +import ( + "fmt" + "io" +) + type Hash string + +func (h Hash) String() string { + return string(h) +} + +func (h *Hash) UnmarshalGQL(v interface{}) error { + _, ok := v.(string) + if !ok { + return fmt.Errorf("labels must be strings") + } + + *h = v.(Hash) + + if !h.IsValid() { + return fmt.Errorf("invalid hash") + } + + return nil +} + +func (h Hash) MarshalGQL(w io.Writer) { + w.Write([]byte(`"` + h.String() + `"`)) +} + +func (h *Hash) IsValid() bool { + if len(*h) != 40 { + return false + } + for _, r := range *h { + if (r < 'a' || r > 'z') && (r < '0' || r > '9') { + return false + } + } + return true +} |