Como criar um tipo que seja apenas movível (move), mas não copiável (Copy) em Rust?
Olá a todos! Comecei a estudar Rust recentemente e me deparei com o conceito de ownership (propriedade) e as traits Copy e Clone. Acho que entendi que tipos primitivos, como i32 ou bool, implementam Copy, então ao atribuir eles são copiados e o original permanece acessível. Já tipos mais complexos, como String, são apenas Clone, e ao atribuir eles são movidos (move).
Mas surgiu uma dúvida: posso criar meu próprio tipo (por exemplo, uma struct) que se comporte como String — ou seja, que seja apenas movível e não possa ser copiado acidentalmente? Por exemplo, quero criar um tipo que represente um identificador único ou algum recurso que não deva ser duplicado. Se eu simplesmente declarar uma struct e adicionar derive(Clone, Copy), ela será copiada a cada atribuição. E se eu não adicionar esses derive, o que acontece?
Aqui está um exemplo de código que me confunde:
```rust
struct MyType {
value: i32,
}
fn main() {
let a = MyType { value: 1