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),
}