in Server/go/apptoken/apptokenOptions.go [25:69]
func (options *AppTokenOptions) Pack() ([]byte, error) {
buf := new(bytes.Buffer)
// hasEngineOptions
hasEngineOptions := options.EngineOptions != nil
if err := binary.Write(buf, binary.BigEndian, hasEngineOptions); err != nil {
return nil, err
}
if hasEngineOptions {
if err := binary.Write(buf, binary.BigEndian, int32(len(options.EngineOptions))); err != nil {
return nil, err
}
if len(options.EngineOptions) > 0 {
// sort by key
keys := make([]string, 0, len(options.EngineOptions))
for k := range options.EngineOptions {
keys = append(keys, k)
}
sort.Strings(keys)
for _, key := range keys {
value := options.EngineOptions[key]
if key == "" || value == "" {
return nil, errors.New("illegal engineOptions entry")
}
if err := binary.Write(buf, binary.BigEndian, int32(len(key))); err != nil {
return nil, err
}
if _, err := buf.Write([]byte(key)); err != nil {
return nil, err
}
if err := binary.Write(buf, binary.BigEndian, int32(len(value))); err != nil {
return nil, err
}
if _, err := buf.Write([]byte(value)); err != nil {
return nil, err
}
}
}
}
return buf.Bytes(), nil
}