gemblockchain 0.3.0

Library to work with Gem blockchain
Documentation
use serde::Deserialize;

macro_rules! response_generator {
    (struct $name:ident {
        $(
            $( #[$attr:meta] )?
            $field_name:ident: $field_type:ty,
        )*
    }) => {
        #[derive(Debug, Deserialize)]
        #[serde(rename_all = "camelCase")]
        pub struct $name {
            $(
                $( #[$attr] )?
                $field_name: $field_type,
            )*
        }

        impl $name {
            $(
                pub fn $field_name(&self) -> $field_type {
                    self.$field_name.clone()
                }
            )*
        }
    }
}

response_generator! {
    struct ResponseBalance {
        balance: u64,
    }
}

response_generator! {
    struct ResponseBalanceDetails {
        regular: u64,
        generating: u64,
        available: u64,
        effective: u64,
    }
}

response_generator! {
    struct ResponseAddress {
        address: String,
    }
}

response_generator! {
    struct ResponseAsset {
        asset_id: String,
        name: String,
        description: String,
        decimals: u64,
        issuer: String,
        reissuable: bool,
    }
}

response_generator! {
    struct ResponseBlock {
        version: u64,
        timestamp: u64,
        reference: String,
        generator: String,
        signature: String,
        transaction_count: u64,
        id: String,
        height: u64,
        total_fee: u64,
    }
}

response_generator! {
    struct ResponseLease {
        id: String,
        origin_transaction_id: String,
        sender: String,
        recipient: String,
        amount: u64,
        height: u64,
        status: String,
        cancel_height: u64,
        cancel_transaction_id: String,
    }
}

response_generator! {
    struct ResponseNodeVersion {
        version: String,
    }
}

response_generator! {
    struct ResponseTransaction {
        #[serde(alias = "type")]
        type_id: u64,
        version: u64,
        id: String,
        sender: String,
        signature: String,
        timestamp: u64,
        fee: u64,
        fee_asset_id: Option<String>,
    }
}

response_generator! {
    struct ResponseTransactionStatus {
        id: String,
        status: String,
        height: u64,
        confirmations: u64,
    }
}