Prefix Scans for Storage Keys
Summary
Since many uses of the Storage interface may have hierarchical keys, e.g. the permissions, it would be beneficial to have a way to iterate over keys matching a given prefix.
Basic example
for _, key := range a.store.KeysWithPrefix("joe.permissions.mymodule.") {
...
}
Motivation
From #28
Since we are iterating over all keys the bot knows we should expect that also non-permission keys are among them.
I suggest you update your unit test to check this is also handled correctly.
Rather than push this onto any developer who needs to interact with the permissions, we could require the Storage interface to support prefix scans. Some storage engines may have a higher performance way of doing prefix scans and we could take advantage of that. If the storage engine does not offer it, the bot could handle the naive looping over keys itself. This removes the burden from developers to implement/test this independently.
Potential Issues
- If the prefix scan isn't optional for the
Storageinterface, a new release would break any third party implementations. As described above, this would not be an issue.
If you're amenable, I can throw together a PR for this.
Yes, I think this addition is a good new feature. You still want to submit a PR for this @dwmunster ? I have more time to work on features and review PRs in the next two weeks. Let me know if you don't have the time right now so I will give it a shot :)
Sorry for taking a while to respond @fgrosse, I've gotten quite busy these past couple weeks. I should have time to put something together this weekend if you'd like. If you'd like it done before then, have at.