I don't actually like the implementation at all, really. In order to implement, you copy and paste this as many times as you have summoning skills you need to limit. That isn't even considering that there may be more code associated with the nature of the summon to begin with.
And that's fine, isn't it?
Sure it could get into an actual system or stuff. But does it really have to?
Those structs must be private though.