[Rust] Traits

iguigu·2022년 6월 12일
0

Traits

  • Rust 컴파일러에게 타입이 반드시 제공해야하는 기능들에 대해 알려주는 것
  • Rust는 generic type이 하는 것에 대해 보수적임
fn is_equal<T>(a:T, b:T)-> bool{
	a==b
}


error[E0369]: binary operation `==` cannot be applied to type `T`
 --> src/lib.rs:2:3
  |
2 |     a==b
  |     -^^- T
  |     |
  |     T
  |
help: consider restricting type parameter `T`
  |
1 | fn is_equal<T: std::cmp::PartialEq>(a:T, b:T)-> bool{
  |              +++++++++++++++++++++

For more information about this error, try `rustc --explain E0369`.
error: could not compile `playground` due to previous error
  • 위와 같이 generic type에 대한 is_equal이란 함수를 선언하면 컴파일러는 모든 타입에 대해 is_equal== 연산자를 사용할 수 없다고 알려줌
  • 이를 해결하기 위해서 PartialEq를 구현해줘야 함
fn is_equal<T:PartialEq>(a:T, b:T)-> bool{
	a==b
}
  • CosmWasm에서 #[derive] attribute를 이용하여 컴파일러에게 traits를 알려줌
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, JsonSchema)]
#[serde(rename_all="snake_case")]
pub enum ExecuteMsg{
    Create(CreateMsg),
    Receive(Cw20ReceiveMsg),
}
profile
2929

0개의 댓글