import (
"encoding/binary"
- "github.com/jhalter/mobius/concat"
"golang.org/x/crypto/bcrypt"
)
Access *[]byte `yaml:"Access"` // 8 byte bitmap
}
-// MarshalBinary marshals an Account to byte slice
-func (a *Account) MarshalBinary() (out []byte) {
+// Read implements io.Reader interface for Account
+func (a *Account) Read(p []byte) (n int, err error) {
fields := []Field{
NewField(fieldUserName, []byte(a.Name)),
NewField(fieldUserLogin, negateString([]byte(a.Login))),
fieldCount := make([]byte, 2)
binary.BigEndian.PutUint16(fieldCount, uint16(len(fields)))
- var fieldPayload []byte
+ p = append(p, fieldCount...)
+
for _, field := range fields {
- fieldPayload = append(fieldPayload, field.Payload()...)
+ p = append(p, field.Payload()...)
}
- return concat.Slices(
- fieldCount,
- fieldPayload,
- )
+ return len(p), nil
}
var userFields []Field
for _, acc := range cc.Server.Accounts {
- userField := acc.MarshalBinary()
- userFields = append(userFields, NewField(fieldData, userField))
+ b := make([]byte, 0, 100)
+ n, err := acc.Read(b)
+ if err != nil {
+ return res, err
+ }
+
+ userFields = append(userFields, NewField(fieldData, b[:n]))
}
res = append(res, cc.NewReply(t, userFields...))