refactor(Adapter): a detailed API for adapters

All the methods of the adapter interface describe
what is explicitly required to be returned by an implementation

Use exception instead of returning false
Using exceptions allows for more detailed errors