// Package keytransform introduces a Datastore Shim that transforms keys before
// passing them to its child. It can be used to manipulate what keys look like
// to the user, for example namespacing keys, reversing them, etc.
//
// Use the Wrap function to wrap a datastore with any KeyTransform.
// A KeyTransform is simply an interface with two functions, a conversion and
// its inverse. For example:
//
//	import (
//	  ktds "github.com/ipfs/go-datastore/keytransform"
//	  ds "github.com/ipfs/go-datastore"
//	)
//
//	func reverseKey(k ds.Key) ds.Key {
//	  return k.Reverse()
//	}
//
//	func invertKeys(d ds.Datastore) {
//	  return ktds.Wrap(d, &ktds.Pair{
//	    Convert: reverseKey,
//	    Invert: reverseKey,  // reverse is its own inverse.
//	  })
//	}
package keytransform
