1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191
//! Look up and parse [OpenAlias](https://openalias.org) data. //! //! # openalias.rs as а library //! //! This library can be used on a couple different levels (basic->high-level): //! //! 1. Parsing/validating OpenAlias "names" (e.g. "donate@getmonero.org", "nabijaczleweli.xyz") //! 2. Parsing/validating OpenAlias records (e.g. "oa1:btc recipient_address=1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H; //! recipient_name=Monero Development; tx_description=Donation to Monero Core Team;") //! 3. Looking up OpenAliases with the DNS (e.g. "donate.nabijaczleweli.xyz" -> `CryptoAddress`) //! //! In that order, examples: //! //! ``` //! // Normally a user would type this in. //! let address = "donate@getmonero.org"; //! //! if let Some(fqdn) = openalias::alias_to_fqdn(address) { //! println!("{} maps to {}", address, fqdn); //! # assert_eq!(fqdn, "donate.getmonero.org."); //! } else { //! // Address is not an OpenAlias //! # assert!(false); //! } //! ``` //! //! Consult the [`alias_to_fqdn()`](fn.alias_to_fqdn.html) documentation for more information and examples. //! //! ``` //! # use std::collections::BTreeMap; //! let record = "oa1:btc recipient_address=1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H; \ //! recipient_name=Monero Development; \ //! tx_description=Donation to Monero Core Team;"; //! //! match record.parse::<openalias::CryptoAddress>() { //! Ok(ca) => { //! println!("{} address: {}", ca.cryptocurrency.to_uppercase(), ca.address); //! // Probably also handle more fields //! # assert_eq!(ca, openalias::CryptoAddress { //! # cryptocurrency: "btc".to_string(), //! # address: "1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H".to_string(), //! # recipient_name: Some("Monero Development".to_string()), //! # tx_description: Some("Donation to Monero Core Team".to_string()), //! # tx_amount: None, //! # tx_payment_id: None, //! # address_signature: None, //! # checksum: None, //! # additional_values: BTreeMap::new(), //! # }); //! } //! Err(err) => { //! // The record is not an OpenAlias record, //! // see err variable so as to the position of failure. //! # assert!(false); //! } //! } //! ``` //! //! Consult the [`CryptoAddress`](struct.CryptoAddress.html) documentation for more information and examples. //! //! ``` //! # use std::collections::BTreeMap; //! // Normally a user would type this in. //! let alias = "donate.nabijaczleweli.xyz"; //! //! match openalias::address_strings(alias) { //! Ok(cas) => { //! println!("{} addresses", cas.len()); //! // cas contains "oa1:"-prefixed records //! # assert_eq!(cas, vec!["oa1:btc recipient_address=1CgLs6CxXMAY4Pj4edQq5vyaFoP9NdqVKH; recipient_name=nabijaczleweli; \ //! # tx_description=Donation to nabijaczleweli;"]); //! } //! Err(err) => { //! // alias isn't an OpenAlias, or there was an error talking with a DNS server //! # assert!(false); //! } //! } //! //! match openalias::addresses(alias) { //! Ok(cas) => { //! println!("{} addresses", cas.len()); //! // cas contains CryptoAddresses //! # assert_eq!(cas, vec![openalias::CryptoAddress { //! # cryptocurrency: "btc".to_string(), //! # address: "1CgLs6CxXMAY4Pj4edQq5vyaFoP9NdqVKH".to_string(), //! # recipient_name: Some("nabijaczleweli".to_string()), //! # tx_description: Some("Donation to nabijaczleweli".to_string()), //! # tx_amount: None, //! # tx_payment_id: None, //! # address_signature: None, //! # checksum: None, //! # additional_values: BTreeMap::new(), //! # }]); //! } //! Err(err) => { //! // alias isn't an OpenAlias, //! // or there was an error talking with a DNS server, //! // or an "oa1:"-prefixed record isn't an OpenAlias record. //! # assert!(false); //! } //! } //! ``` //! //! Consult the [`address_strings()`](fn.address_strings.html) and [`addresses()`](fn.addresses.html) //! documentation for more information and examples. //! //! # openalias.rs as аn executable //! //! This is just a very short synopsis of //! [the manpage](https://rawcdn.githack.com/nabijaczleweli/openalias.rs/man/openalias.1.html), //! so consult that for more data. //! //! ## OPTIONS //! //! | Option | Description | //! |--------------------------|-------------------------------------------------------| //! | <OPEN_ALIAS>... | FQDN or email-style aliases to look up addresses for. | //! | --verbose | Print more data about what's happenning to stderr. | //! | --raw | Print just the record text. | //! | --currency=[CURRENCY]... | Limit results to specified currencies. | //! //! ## EXAMPLES //! //! `openalias nabijaczleweli.xyz donate.getmonero.org` //! //! ```text //! Addresses of nabijaczleweli.xyz: //! btc: //! nabijaczleweli //! 1CgLs6CxXMAY4Pj4edQq5vyaFoP9NdqVKH //! //! Addresses of donate.getmonero.org: //! xmr: //! Monero Development //! 44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3 //! XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A //! Donation to Monero Core Team //! btc: //! Monero Development //! 1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H //! Donation to Monero Core Team //! ``` //! //! `openalias -rv nabijaczleweli.xyz donate@getmonero.org` //! //! ```text //! Looking up nabijaczleweli.xyz... //! Addresses for nabijaczleweli.xyz: //! oa1:btc recipient_address=1CgLs6CxXMAY4Pj4edQq5vyaFoP9NdqVKH; recipient_name=nabijaczleweli; //! //! Looking up donate@getmonero.org... //! Addresses for donate@getmonero.org: //! oa1:xmr recipient_address=44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3 //! XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A; //! recipient_name=Monero Development; tx_description=Donation to Monero Core Team; //! oa1:btc recipient_address=1KTexdemPdxSBcG55heUuTjDRYqbC5ZL8H; recipient_name=Monero Development; //! tx_description=Donation to Monero Core Team; //! ``` //! //! `openalias -cxmr -c doge nabijaczleweli.xyz donate.getmonero.org` //! //! ```text //! No xmr, nor doge addresses found for nabijaczleweli.xyz. //! //! Addresses of donate.getmonero.org: //! xmr: //! Monero Development //! 44AFFq5kSiGBoZ4NMDwYtN18obc8AemS33DBLWs3H7otXft3 //! XjrpDtQGv7SqSsaBYBb98uNbr2VBBEt7f2wfn3RVGQBEP3A //! Donation to Monero Core Team //! ``` extern crate resolve; #[macro_use] extern crate clap; extern crate crc; mod error; mod grammar; mod address; mod options; mod resolving; mod crypto_addr; pub use self::error::Error; pub use self::options::Options; pub use self::grammar::ParseError; pub use self::address::alias_to_fqdn; pub use self::crypto_addr::CryptoAddress; pub use self::resolving::{address_strings, addresses};