aboutsummaryrefslogtreecommitdiffstats
path: root/util/hash.go
diff options
context:
space:
mode:
Diffstat (limited to 'util/hash.go')
-rw-r--r--util/hash.go40
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
+}