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