Decoder uses visitor pattern