use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::{Binary, HexBinary};
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, Default, Debug, PartialEq, Eq, JsonSchema)]
pub struct ContractInfoResponse {
pub code_id: u64,
pub creator: String,
pub admin: Option<String>,
pub pinned: bool,
pub ibc_port: Option<String>,
}
impl QueryResponseType for ContractInfoResponse {}
impl ContractInfoResponse {
#[doc(hidden)]
#[deprecated(
note = "Use ContractInfoResponse::default() and mutate the fields you want to set."
)]
pub fn new(code_id: u64, creator: impl Into<String>) -> Self {
ContractInfoResponse {
code_id,
creator: creator.into(),
..Default::default()
}
}
}
#[non_exhaustive]
#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq, JsonSchema)]
pub struct CodeInfoResponse {
pub code_id: u64,
pub creator: String,
pub checksum: HexBinary,
}
impl_response_constructor!(
CodeInfoResponse,
code_id: u64,
creator: String,
checksum: HexBinary
);
impl QueryResponseType for CodeInfoResponse {}
#[cfg(test)]
mod tests {
use super::*;
use crate::to_binary;
#[test]
fn wasm_query_contract_info_serialization() {
let query = WasmQuery::ContractInfo {
contract_addr: "aabbccdd456".into(),
};
let json = to_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_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: "jane".to_string(),
admin: Some("king".to_string()),
pinned: true,
ibc_port: Some("wasm.123".to_string()),
};
let json = to_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::HexBinary;
let response = CodeInfoResponse {
code_id: 67,
creator: "jane".to_string(),
checksum: HexBinary::from_hex(
"f7bb7b18fb01bbf425cf4ed2cd4b7fb26a019a7fc75a4dc87e8a0b768c501f00",
)
.unwrap(),
};
let json = to_binary(&response).unwrap();
assert_eq!(
String::from_utf8_lossy(&json),
r#"{"code_id":67,"creator":"jane","checksum":"f7bb7b18fb01bbf425cf4ed2cd4b7fb26a019a7fc75a4dc87e8a0b768c501f00"}"#,
);
}
}