HiveBrain v1.2.0
Get Started
← Back to all entries
snippetrustCritical

How can I implement Rust's Copy trait?

Submitted by: @import:stackoverflow-api··
0
Viewed 0 times
howrustcancopyimplementtrait

Problem

I am trying to initialise an array of structs in Rust:

enum Direction {
    North,
    East,
    South,
    West,
}

struct RoadPoint {
    direction: Direction,
    index: i32,
}

// Initialise the array, but failed.
let data = [RoadPoint { direction: Direction::East, index: 1 }; 4];


When I try to compile, the compiler complains that the Copy trait is not implemented:

error[E0277]: the trait bound main::RoadPoint: std::marker::Copy is not satisfied
--> src/main.rs:15:16
|
15 | let data = [RoadPoint { direction: Direction::East, index: 1 }; 4];
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait
std::marker::Copy is not implemented for main::RoadPoint
|
= note: the
Copy trait is required because the repeated element will be copied


How can the Copy trait be implemented?

Solution

You don't have to implement Copy yourself; the compiler can derive it for you:

#[derive(Copy, Clone)]
enum Direction {
    North,
    East,
    South,
    West,
}

#[derive(Copy, Clone)]
struct RoadPoint {
    direction: Direction,
    index: i32,
}


Note that every type that implements Copy must also implement Clone. Clone can also be derived.

Code Snippets

#[derive(Copy, Clone)]
enum Direction {
    North,
    East,
    South,
    West,
}

#[derive(Copy, Clone)]
struct RoadPoint {
    direction: Direction,
    index: i32,
}

Context

Stack Overflow Q#35458562, score: 127

Revisions (0)

No revisions yet.