fullid.go raw
1 package types
2
3 import (
4 "io"
5
6 "next.orly.dev/pkg/lol/errorf"
7 "github.com/minio/sha256-simd"
8 )
9
10 const IdLen = sha256.Size
11
12 type Id struct {
13 val [IdLen]byte
14 }
15
16 func (fi *Id) FromId(id []byte) (err error) {
17 if len(id) != IdLen {
18 err = errorf.E(
19 "fullid.FromId: invalid ID length, got %d require %d", len(id),
20 IdLen,
21 )
22 return
23 }
24 copy(fi.val[:], id)
25 return
26 }
27 func (fi *Id) Bytes() (b []byte) { return fi.val[:] }
28
29 func (fi *Id) MarshalWrite(w io.Writer) (err error) {
30 _, err = w.Write(fi.val[:])
31 return
32 }
33
34 func (fi *Id) UnmarshalRead(r io.Reader) (err error) {
35 copy(fi.val[:], fi.val[:IdLen])
36 _, err = r.Read(fi.val[:])
37 return
38 }
39