Pipeline polimórfico multifásico com traits

Rust Hard traits

Tarefa «Pipeline polimórfico multifásico com traits»

Implemente um sistema de traits Stage, Pipeline e Transform, que permita construir pipelines de processamento de dados. O trait Stage define o método process(&self, input: i32) -> i32. O trait Pipeline define o método run(&self, stages: Vec<Box<dyn Stage>>, input: i32) -> i32, que aplica sequencialmente todas as stages. O trait Transform define o método transform(&self, value: i32) -> i32, que pode alterar o valor de acordo com alguma regra. Implemente as estruturas AddStage, MultiplyStage, NegateStage, cada uma implementando Stage. Implemente também a estrutura SimplePipeline, implementando Pipeline. Em seguida, escreva uma função que recebe uma string com comandos (add, mul, neg) e números, cria as stages correspondentes, executa o pipeline com o valor inicial 0 e exibe o resultado. Os comandos são fornecidos separados por espaços: add 5 mul 2 neg. Restrições: valor de entrada i32, resultado garantido cabe em i32.

Formato de Entrada

String com comandos e números separados por espaços. Por exemplo: 'add 5 mul 2 neg'.

Formato de Saída

Número inteiro — resultado do processamento do valor inicial 0 através do pipeline de stages.

Exemplos

Exemplo 1

ENTRADA
add 5 mul 2 neg
SAÍDA
-10

Exemplo 2

ENTRADA
mul 3 add 10 neg
SAÍDA
-10

Exemplo 3

ENTRADA
5 1 2 3 4 5
SAÍDA
0

Exemplo 4

ENTRADA
add 100 mul 0
SAÍDA
0

Exemplo 5

ENTRADA
4
SAÍDA
0
main.rs