code: func (idx *ListIndex) All(value []byte, opts *Options) ([][]byte, error) {
  	var list [][]byte
  	c := idx.IndexBucket.Cursor()
  	cur := internal.Cursor{C: c, Reverse: opts != nil && opts.Reverse}
  
  	prefix := generatePrefix(value)
  
  	k, id := c.Seek(prefix)
  	if cur.Reverse {
  		var count int
  		kc := k
  		idc := id
  		for ; kc != nil && bytes.HasPrefix(kc, prefix); kc, idc = c.Next() {
  			count++
  			k, id = kc, idc
  		}
  		if kc != nil {
  			k, id = c.Prev()
  		}
  		list = make([][]byte, 0, count)
  	}
  
  	for ; bytes.HasPrefix(k, prefix); k, id = cur.Next() {
  		if opts != nil && opts.Skip > 0 {
  			opts.Skip--
  			continue
  		}
  
  		if opts != nil && opts.Limit == 0 {
  			break
  		}
  
  		if opts != nil && opts.Limit > 0 {
  			opts.Limit--
  		}
  
  		list = append(list, id)
  	}
  
  	return list, nil
  }
docs: // All the IDs corresponding to the given value