use schemars::JsonSchema; use serde::{Deserialize, Serialize}; use cw0::Expiration; #[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)] #[serde(rename_all = "snake_case")] pub enum Cw721QueryMsg { /// Return the owner of the given token, error if token does not exist /// Return type: OwnerOfResponse OwnerOf { token_id: String, /// unset or false will filter out expired approvals, you must set to true to see them include_expired: Option, }, /// Return operator that can access all of the owner's tokens. /// Return type: `ApprovedResponse` Approved { owner: String, operator: String }, /// List all operators that can access all of the owner's tokens. /// Return type: `ApprovedForAllResponse` ApprovedForAll { owner: String, /// unset or false will filter out expired approvals, you must set to true to see them include_expired: Option, start_after: Option, limit: Option, }, /// Total number of tokens issued NumTokens {}, /// With MetaData Extension. /// Returns top-level metadata about the contract: `ContractInfoResponse` ContractInfo {}, /// With MetaData Extension. /// Returns metadata about one particular token, based on *ERC721 Metadata JSON Schema* /// but directly from the contract: `NftInfoResponse` NftInfo { token_id: String }, /// With MetaData Extension. /// Returns the result of both `NftInfo` and `OwnerOf` as one query as an optimization /// for clients: `AllNftInfo` AllNftInfo { token_id: String, /// unset or false will filter out expired approvals, you must set to true to see them include_expired: Option, }, /// With Enumerable extension. /// Returns all tokens owned by the given address, [] if unset. /// Return type: TokensResponse. Tokens { owner: String, start_after: Option, limit: Option, }, /// With Enumerable extension. /// Requires pagination. Lists all token_ids controlled by the contract. /// Return type: TokensResponse. AllTokens { start_after: Option, limit: Option, }, } #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] pub struct OwnerOfResponse { /// Owner of the token pub owner: String, /// If set this address is approved to transfer/send the token as well pub approvals: Vec, } #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] pub struct Approval { /// Account that can transfer/send the token pub spender: String, /// When the Approval expires (maybe Expiration::never) pub expires: Expiration, } #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] pub struct ApprovalResponse { pub approval: Approval, } #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] pub struct ApprovalsResponse { pub approvals: Vec, } #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] pub struct OperatorsResponse { pub operators: Vec, } #[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)] pub struct NumTokensResponse { pub count: u64, } #[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)] pub struct ContractInfoResponse { pub name: String, pub symbol: String, } #[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)] pub struct NftInfoResponse { /// Universal resource identifier for this NFT /// Should point to a JSON file that conforms to the ERC721 /// Metadata JSON Schema pub token_uri: Option, /// You can add any custom metadata here when you extend cw721-base pub extension: T, } #[derive(Serialize, Deserialize, Clone, PartialEq, JsonSchema, Debug)] pub struct AllNftInfoResponse { /// Who can transfer the token pub access: OwnerOfResponse, /// Data on the token itself, pub info: NftInfoResponse, } #[derive(Serialize, Deserialize, Clone, PartialEq, Eq, JsonSchema, Debug)] pub struct TokensResponse { /// Contains all token_ids in lexicographical ordering /// If there are more than `limit`, use `start_from` in future queries /// to achieve pagination. pub tokens: Vec, }