Skip to content

set encoder has wrong state #40

@michael2008

Description

@michael2008

some of my test cases fail as the func WriteSetObject() fails.

after some dig, I found the problem:

func (enc *Encoder) WriteSetObject(key string, values [][]byte, options ...interface{}) error {

func (enc *Encoder) WriteSetObject(key string, values [][]byte, options ...interface{}) error {
	err := enc.beforeWriteObject(options...)
	if err != nil {
		return err
	}
	ok, err := enc.tryWriteIntSetEncoding(key, values)
	if err != nil {
		return err
	}
	if ok {
		return nil
	}
	err = enc.writeSetEncoding(key, values)
	if err != nil {
		return err
	}
	enc.state = writtenObjectState
	return nil
}

the logic is a bit different from WriteHashMapObject(). It should be

func (enc *Encoder) WriteSetObject(key string, values [][]byte, options ...interface{}) error {
	err := enc.beforeWriteObject(options...)
	if err != nil {
		return err
	}
	ok, err := enc.tryWriteIntSetEncoding(key, values)
	if err != nil {
		return err
	}
	if !ok {
		err = enc.writeSetEncoding(key, values)
		if err != nil {
			return err
		}
	}
	enc.state = writtenObjectState
	return nil
}

fixed in #39

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions