forge-types 0.2.0

Ergo blockchain types
Documentation
use serde::{Deserialize, Serialize};

use crate::asset::asset::Asset;

use super::additional_registers::AdditionalRegisters;

#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Output {
    #[serde(rename = "boxId")]
    pub box_id: String,
    pub value: u64,
    #[serde(rename = "ergoTree")]
    pub ergo_tree: String,
    #[serde(rename = "creationHeight")]
    pub creation_height: u64,
    pub assets: Vec<Asset>,
    #[serde(rename = "additionalRegisters")]
    pub additional_registers: AdditionalRegisters,
    #[serde(rename = "transactionId")]
    pub transaction_id: String,
    pub index: u64,
}

impl Output {
    pub fn new(
        box_id: String,
        value: u64,
        ergo_tree: String,
        creation_height: u64,
        assets: Vec<Asset>,
        additional_registers: AdditionalRegisters,
        transaction_id: String,
        index: u64,
    ) -> Self {
        Self {
            box_id,
            value,
            ergo_tree,
            creation_height,
            assets,
            additional_registers,
            transaction_id,
            index,
        }
    }
}

#[cfg(test)]
mod tests {
    use super::*;

    #[test]
    fn test_output() {
        let json = r#"{
            "boxId": "1ab9da11fc216660e974842cc3b7705e62ebb9e0bf5ff78e53f9cd40abadd117",
            "value": 147,
            "ergoTree": "0008cd0336100ef59ced80ba5f89c4178ebd57b6c1dd0f3d135ee1db9f62fc634d637041",
            "creationHeight": 9149,
            "assets": [
              {
                "tokenId": "4ab9da11fc216660e974842cc3b7705e62ebb9e0bf5ff78e53f9cd40abadd117",
                "amount": 1000
              }
            ],
            "additionalRegisters": {
              "R4": "100204a00b08cd0336100ef59ced80ba5f89c4178ebd57b6c1dd0f3d135ee1db9f62fc634d637041ea02d192a39a8cc7a70173007301"
            },
            "transactionId": "2ab9da11fc216660e974842cc3b7705e62ebb9e0bf5ff78e53f9cd40abadd117",
            "index": 0
          }"#;
        
        let output: Output = serde_json::from_str(json).unwrap();

        assert_eq!(
            output.box_id,
            "1ab9da11fc216660e974842cc3b7705e62ebb9e0bf5ff78e53f9cd40abadd117".to_string()
        );

        assert_eq!(output.value, 147);
        assert_eq!(
            output.ergo_tree,
            "0008cd0336100ef59ced80ba5f89c4178ebd57b6c1dd0f3d135ee1db9f62fc634d637041".to_string()
        );
        assert_eq!(output.assets.get(0).unwrap().token_id, "4ab9da11fc216660e974842cc3b7705e62ebb9e0bf5ff78e53f9cd40abadd117");
    }
}