# #\[ink(impl)]

Esse atributo suporta um caso específico que raramente é necessário.&#x20;

Pode ser aplicado em blocos de implementação ink! para torná-los reconhecidos pelo ink!. Isso é útil se o bloco de implementação não contiver nenhum outro atributo ink!, pois seria identificado pelo ink! como um item Rust. Adicionar `#[ink(impl)]` em tais blocos de implementação faz com que sejam tratados como blocos de implementação ink!, permitindo assim acessar o ambiente, entre outras coisas.&#x20;

Observe que mensagens e construtores ink! ainda precisam ser explicitamente identificados como tais.

### Exemplo[​](https://use.ink/macros-attributes/impl#example) <a href="#example" id="example"></a>

Um bloco de implementação pode ser definido como uma implementação de um trait para a struct de armazenamento ink! usando a anotação `#[ink(impl)]` - mesmo que nenhum dos itens internos tenha quaisquer atributos específicos do ink!:

```rust
use core::convert::TryFrom;

#[ink::contract]
mod my_module {
    #[ink(storage)]
    pub struct MyStorage {
        /* storage fields */
    }

    #[ink(impl)]
    impl MyStorage {
        fn my_method(&self) -> i32 {
            /* method implementation */
        }
    }

    impl MyStorage {
      #[ink(constructor)]
      pub fn my_constructor() -> Self {
          /* constructor implementation */
      }

      #[ink(message)]
      pub fn my_message(&self) {
          /* message implementation */
      }
    }
}
```
