Решение тут не вполне однозначное.
С одной стороны, гораздо эффективнее было бы таскать ссылки (&str), т.к. их копирование или извлечение ссылки на subslice весьма дёшево. Это позволит создавать и отбрасывать структуры при синтаксическом разборе без оглядки на overhead от владения String.
С другой стороны, используя ссылки, вы обязуете себя обеспечить тот факт, что исходная строка будет жить дольше, чем ваш AST. Это накладывает приличные ограничения на ваш код.
В любом случае, я бы порекомендовал использовать &str. Однако, без кода подсказать, как лучше сохранить исходный String до конца обработки запроса, я не смогу.