mirror of https://github.com/bumi/openalias-ruby
61 lines
2.4 KiB
Rust
61 lines
2.4 KiB
Rust
#[macro_use]
|
|
extern crate ruru;
|
|
extern crate openalias;
|
|
|
|
use ruru::{Array, Hash, Class, Boolean, Object, RString, Symbol};
|
|
|
|
class!(Openalias);
|
|
|
|
methods!(
|
|
Openalias,
|
|
_itself,
|
|
|
|
fn addresses(address: RString) -> Array {
|
|
let mut cryptoaddresses = Array::new();
|
|
match openalias::addresses(&address.unwrap().to_string()) {
|
|
Ok(cas) => {
|
|
for c in cas {
|
|
let mut cryptoaddress = Hash::new();
|
|
cryptoaddress.store(Symbol::new("cryptocurrency"), RString::new(&c.cryptocurrency));
|
|
cryptoaddress.store(Symbol::new("address"), RString::new(&c.address));
|
|
if let Some(recipient_name) = c.recipient_name.as_ref() {
|
|
cryptoaddress.store(Symbol::new("recipient_name"), RString::new(recipient_name));
|
|
}
|
|
if let Some(tx_description) = c.tx_description.as_ref() {
|
|
cryptoaddress.store(Symbol::new("tx_description"), RString::new(tx_description));
|
|
}
|
|
if let Some(tx_amount) = c.tx_amount.as_ref() {
|
|
cryptoaddress.store(Symbol::new("tx_amount"), RString::new(tx_amount));
|
|
}
|
|
if let Some(tx_payment_id) = c.tx_payment_id.as_ref() {
|
|
cryptoaddress.store(Symbol::new("tx_payment_id"), RString::new(tx_payment_id));
|
|
}
|
|
if let Some(address_signature) = c.address_signature.as_ref() {
|
|
cryptoaddress.store(Symbol::new("address_signature"), RString::new(address_signature));
|
|
}
|
|
if let Some(&(_, checksum_ok)) = c.checksum.as_ref() {
|
|
cryptoaddress.store(Symbol::new("checksum"), Boolean::new(checksum_ok));
|
|
}
|
|
for (key, val) in &c.additional_values {
|
|
cryptoaddress.store(Symbol::new(key), RString::new(val));
|
|
}
|
|
|
|
let ca = Class::from_existing("Openalias").get_nested_class("CryptoAddress").new_instance(vec![cryptoaddress.to_any_object()]);
|
|
cryptoaddresses.push(ca);
|
|
}
|
|
return cryptoaddresses;
|
|
}
|
|
Err(_cas) => {
|
|
return cryptoaddresses;
|
|
}
|
|
}
|
|
}
|
|
);
|
|
|
|
#[no_mangle]
|
|
pub extern fn init_openalias_rust() {
|
|
Class::from_existing("Openalias").define(|itself| {
|
|
itself.def_self("addresses", addresses);
|
|
});
|
|
}
|