novax-executor 0.2.12

Part of the NovaX framework, this crate facilitates the execution of transactions and queries against smart contracts on the blockchain.
use serde::Deserialize;

#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmValuesQueryResponse {
    pub data: Option<VmValuesQueryResponseData>,
    pub error: String
}

#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmValuesQueryResponseData {
    pub data: VmValuesQueryResponseDataData
}

#[derive(Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct VmValuesQueryResponseDataData {
    pub return_data: Option<Vec<String>>,
    pub return_message: String
}

#[cfg(test)]
mod tests {
    use crate::network::query::models::response::VmValuesQueryResponse;

    #[test]
    fn test_deserialize_execution_error() {
        let data = r#"
{
  "data": {
    "blockInfo": {
      "nonce": 20144493,
      "hash": "325c96bb497e497fe417aa20dbcba9fc233654e9999982fdf9f5599ec83daa2f",
      "rootHash": "81e0c2bcb292ae083af60fdfa1889d032dbfc79e4d14a8d1a0dbe9c5606d5033"
    },
    "data": {
      "returnData": null,
      "returnCode": "contract not found",
      "returnMessage": "invalid contract code (not found)",
      "gasRemaining": 0,
      "gasRefund": 0,
      "outputAccounts": {},
      "deletedAccounts": null,
      "touchedAccounts": null,
      "logs": [
        {
          "identifier": "aW50ZXJuYWxWTUVycm9ycw==",
          "address": "erd1qqqqqqqqqqqqqpgqhnmuen6gx7unfmqsjwx0ul7ezjyg2ndfvcqsa4nqax",
          "topics": [
            "AAAAAAAAAAAFALz3zM9IN7k07BCTjP5/2RSIhU2pZgE=",
            "dmlld1BhaXJz"
          ],
          "data": "CglydW50aW1lLmdvOjgyNyBbaW52YWxpZCBjb250cmFjdCBjb2RlIChub3QgZm91bmQpXSBbdmlld1BhaXJzXQ==",
          "additionalData": [
            "CglydW50aW1lLmdvOjgyNyBbaW52YWxpZCBjb250cmFjdCBjb2RlIChub3QgZm91bmQpXSBbdmlld1BhaXJzXQ=="
          ]
        }
      ]
    }
  },
  "error": "",
  "code": "successful"
}
        "#;

        _ = serde_json::from_str::<VmValuesQueryResponse>(data).unwrap();
    }
}