func()

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
}