For the first question, the actual code should read the appropriate bool, and parse the appropriate member of the union. Note that this means you cannot name the two members of the union the same, because then you cannot differentiate them.
Thus, you should change:
Suggestion suggestion;
Unit suggestion;
to something like
Suggestion suggestion;
Unit unit;