Como implementar um trait para um tipo de um crate externo se não posso alterar nem o trait nem o tipo?
Olá a todos! Sou novo em Rust e me deparei com um problema que não consigo resolver há várias horas.
Tenho um crate externo `external_crate` que define o trait `Transformer` e a struct `Data`. Não posso alterar o código desse crate. Parece mais ou menos assim:
```rust
// external_crate
pub trait Transformer {
fn transform(&self) -> String;
}
pub struct Data {
pub value: i32,
}
```
Quero implementar `Transformer` para `Data` para usar isso no meu projeto. Escrevo:
```rust
use external_crate::{Data, Transformer};
impl Transformer for Data {
fn transform(&self) -> String {
format!("Value: {}", self.value)
}
}
```
Mas o compilador dá o erro:
```
error[E0117]: only traits defined in the current crate can be implemented for arbitrary types
```
Entendo que isso tem a ver com a regra orphan rule, mas não consigo descobrir como contornar essa limitação corretamente. O que devo fazer? Preciso criar um wrapper? Ou existe