Многофазный полиморфный конвейер с трейтами

Rust Сложный traits

Задача «Многофазный полиморфный конвейер с трейтами»

Реализуйте систему из трейтов Stage, Pipeline, и Transform, позволяющую строить конвейеры обработки данных. Трейт Stage определяет метод process(&self, input: i32) -> i32. Трейт Pipeline определяет метод run(&self, stages: Vec<Box<dyn Stage>>, input: i32) -> i32, который последовательно применяет все стадии. Трейт Transform определяет метод transform(&self, value: i32) -> i32, который может изменять значение по некоторому правилу. Реализуйте структуры AddStage, MultiplyStage, NegateStage, каждая из которых реализует Stage. Также реализуйте структуру SimplePipeline, реализующую Pipeline. Затем напишите функцию, которая принимает строку с командами (add, mul, neg) и числами, создаёт соответствующие стадии, запускает конвейер с начальным значением 0 и выводит результат. Команды подаются через пробел: add 5 mul 2 neg. Ограничения: входное значение i32, результат гарантированно помещается в i32.

Формат ввода

Строка с командами и числами, разделёнными пробелами. Например: 'add 5 mul 2 neg'.

Формат вывода

Целое число — результат обработки начального значения 0 через конвейер стадий.

Примеры

Пример 1

ВВОД
add 5 mul 2 neg
ВЫВОД
-10

Пример 2

ВВОД
mul 3 add 10 neg
ВЫВОД
-10

Пример 3

ВВОД
5 1 2 3 4 5
ВЫВОД
0

Пример 4

ВВОД
add 100 mul 0
ВЫВОД
0

Пример 5

ВВОД
4
ВЫВОД
0
main.rs