Ok re reading this I think the confusion comes from the difference between data stream and messages. MavLink defines a datastream as a set of messages, so by changing the rate of a stream you are changing the rate of a group of messages.
I tried to follow the same method but had to redefine the streams (they exist on the mavlink lib) and appended the "MY" to the streams names to be able to use them as indexes since the complete set of defined streams is larger and I don't use them all.
I could have used the native stream definition enum but I would have larger arrays with unused indexes.