package hotline
import (
- "encoding/binary"
"github.com/jhalter/mobius/concat"
)
Access *[]byte `yaml:"Access"` // 8 byte bitmap
}
-// Payload marshals an account to byte slice
-// Example:
-// 00 04 // fieldCount?
-// 00 66 // 102 - fieldUserName
-// 00 0d // 13
-// 61 64 6d 69 6e 69 73 74 72 61 74 6f 72 // administrator
-// 00 69 // 105 fieldUserLogin (encoded)
-// 00 05 // len
-// 9e 9b 92 96 91 // encoded login name
-// 00 6a // 106 fieldUserPassword
-// 00 01 // len
-// 78
-// 00 6e // fieldUserAccess
-// 00 08
-// ff d3 cf ef ff 80 00 00
-func (a *Account) Payload() (out []byte) {
- nameLen := make([]byte, 2)
- binary.BigEndian.PutUint16(nameLen, uint16(len(a.Name)))
-
- loginLen := make([]byte, 2)
- binary.BigEndian.PutUint16(loginLen, uint16(len(a.Login)))
-
+// MarshalBinary marshals an Account to byte slice
+func (a *Account) MarshalBinary() (out []byte) {
return concat.Slices(
[]byte{0x00, 0x3}, // param count -- always 3
-
- []byte{0x00, 0x66}, // fieldUserName
- nameLen,
- []byte(a.Name),
-
- []byte{0x00, 0x69}, // fieldUserLogin
- loginLen,
- negateString([]byte(a.Login)),
-
- []byte{0x00, 0x6e}, // fieldUserAccess
- []byte{0x00, 0x08},
- *a.Access,
+ NewField(fieldUserName, []byte(a.Name)).Payload(),
+ NewField(fieldUserLogin, negateString([]byte(a.Login))).Payload(),
+ NewField(fieldUserAccess, *a.Access).Payload(),
)
}