code: func (a *ArchTypes) UnmarshalBinary(p []byte) error {
  	b := buffer.New(p)
  	// Length must be at least 2, and divisible by 2.
  	if b.Len() < 2 || b.Len()%2 != 0 {
  		return io.ErrUnexpectedEOF
  	}
  
  	// Allocate ArchTypes at once and unpack every two bytes into an element
  	arch := make(ArchTypes, 0, b.Len()/2)
  	for b.Len() > 1 {
  		arch = append(arch, ArchType(b.Read16()))
  	}
  
  	*a = arch
  	return nil
  }
docs: // UnmarshalBinary unmarshals a raw byte slice into an ArchTypes slice.
  //
  // If the byte slice is less than 2 bytes in length, or is not a length that
  // is divisible by 2, io.ErrUnexpectedEOF is returned.