use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::prelude::*;
use crate::{Addr, Binary, Checksum};
use super::query_response::QueryResponseType;
#[non_exhaustive]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
#[serde(rename_all = "snake_case")]
pub enum WasmQuery {
Smart {
contract_addr: String,
msg: Binary,
},
Raw {
contract_addr: String,
key: Binary,
},
ContractInfo { contract_addr: String },
#[cfg(feature = "cosmwasm_1_2")]
CodeInfo { code_id: u64 },
}
#[non_exhaustive]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct ContractInfoResponse {
pub code_id: u64,
pub creator: Addr,
pub admin: Option<Addr>,
pub pinned: bool,
pub ibc_port: Option<String>,
}
impl QueryResponseType for ContractInfoResponse {}
impl_response_constructor!(
ContractInfoResponse,
code_id: u64,
creator: Addr,
admin: Option<Addr>,
pinned: bool,
ibc_port: Option<String>
);
#[non_exhaustive]
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, JsonSchema)]
pub struct CodeInfoResponse {
pub code_id: u64,
pub creator: Addr,
pub checksum: Checksum,
}
impl_response_constructor!(
CodeInfoResponse,
code_id: u64,
creator: Addr,
checksum: Checksum
);
impl QueryResponseType for CodeInfoResponse {}
#[cfg(test)]
mod tests {
use super::*;
use crate::to_json_binary;
#[test]
fn wasm_query_contract_info_serialization() {
let query = WasmQuery::ContractInfo {
contract_addr: "aabbccdd456".into(),
};
let json = to_json_binary(&query).unwrap();
assert_eq!(
String::from_utf8_lossy(&json),
r#"{"contract_info":{"contract_addr":"aabbccdd456"}}"#,
);
}
#[test]
#[cfg(feature = "cosmwasm_1_2")]
fn wasm_query_code_info_serialization() {
let query = WasmQuery::CodeInfo { code_id: 70 };
let json = to_json_binary(&query).unwrap();
assert_eq!(
String::from_utf8_lossy(&json),
r#"{"code_info":{"code_id":70}}"#,
);
}
#[test]
fn contract_info_response_serialization() {
let response = ContractInfoResponse {
code_id: 67,
creator: Addr::unchecked("jane"),
admin: Some(Addr::unchecked("king")),
pinned: true,
ibc_port: Some("wasm.123".to_string()),
};
let json = to_json_binary(&response).unwrap();
assert_eq!(
String::from_utf8_lossy(&json),
r#"{"code_id":67,"creator":"jane","admin":"king","pinned":true,"ibc_port":"wasm.123"}"#,
);
}
#[test]
#[cfg(feature = "cosmwasm_1_2")]
fn code_info_response_serialization() {
use crate::Checksum;
let response = CodeInfoResponse {
code_id: 67,
creator: Addr::unchecked("jane"),
checksum: Checksum::from_hex(
"f7bb7b18fb01bbf425cf4ed2cd4b7fb26a019a7fc75a4dc87e8a0b768c501f00",
)
.unwrap(),
};
let json = to_json_binary(&response).unwrap();
assert_eq!(
String::from_utf8_lossy(&json),
r#"{"code_id":67,"creator":"jane","checksum":"f7bb7b18fb01bbf425cf4ed2cd4b7fb26a019a7fc75a4dc87e8a0b768c501f00"}"#,
);
}
}