Mnemonix is a key/value adapter library that employs a repository pattern. I wanted to support a few things with it:
- Multiple 'feature sets'--collections of functions that may or may not be implemented for an adapter
- A single unified API inside the core module incorporating all feature sets
- Compile-time and runtime support for configuring repositories
- Application-controlled and DIY repo supervision
- The ability for library users to build custom modules with only particular feature sets