I think ArrayAccess could be a better option, not sure though. One benefit is that we use exactly the same parameter names as gateway, here we have them camlecased partially. :P