func newHelper(store kv.Store, key string, opts placement.Options) helper {
	if opts.IsStaged() {
		return newStagedPlacementHelper(store, key)
	}
	return newPlacementHelper(store, key)
}
newHelper returns a new placement storage helper.
package storage
import (
	"errors"
	"fmt"
	"github.com/m3db/m3cluster/generated/proto/placementpb"
	"github.com/m3db/m3cluster/kv"
	"github.com/m3db/m3cluster/placement"
	"github.com/golang/protobuf/proto"
)
var (
	errInvalidProtoForSinglePlacement    = errors.New("invalid proto for single placement")
	errInvalidProtoForPlacementSnapshots = errors.New("invalid proto for placement snapshots")
	errNoPlacementInTheSnapshots         = errors.New("not placement in the snapshots")
)
type helper interface {
	Placement() (placement.Placement, int, error)
	PlacementProto() (proto.Message, int, error)
	GenerateProto(p placement.Placement) (proto.Message, error)
	ValidateProto(proto proto.Message) error
	PlacementForVersion(version int) (placement.Placement, error)
}