Crates.io | exchange-rate |
lib.rs | exchange-rate |
version | 0.1.3 |
source | src |
created_at | 2019-02-03 02:34:36.017754 |
updated_at | 2019-02-11 08:41:37.294466 |
description | The best Exchange Rate search for a given set of Exchanges, Currencies, Exchange Rates and Exchange Rate Requests. |
homepage | https://github.com/dalibor-matura/exchange-rate |
repository | https://github.com/dalibor-matura/exchange-rate |
max_upload_size | |
id | 112291 |
size | 95,701 |
The best Exchange Rate path search for a given set of Exchanges, Currencies, Exchange Rates and Exchange Rate Requests.
Crate | Documentation | Travis CI | CodeCov |
---|---|---|---|
In order to provide customers a product that lets them spend cryptocurrencies to buy goods from merchants who only accept fiat currency, we need to solve two problems:
The idea is based on the challenge I received once as a part of an interview.
As a standard Rust project, building it and running it is what you would expect.
cargo build
or
cargo build --release
cargo run < data/exchange-rate-path-input.txt
or
cargo run --release < data/exchange-rate-path-input.txt
Input is formed by two types of lines: "Price Update" and "Exchange Rate Request". Example of the expected input format can be found in data/exchange-rate-input.txt.
<timestamp> <exchange> <source_currency> <destination_currency> <forward_factor> <backward_factor>
2019-08-01T08:42:22+00:00 BITFINEX BTC USD 1000.0 0.0009
EXCHANGE_RATE_REQUEST <source_exchange> <source_currency> <destination_exchange> <destination_currency>
EXCHANGE_RATE_REQUEST BITFINEX ETH BINANCE BTC
The implementation consist from three main parts and a gel connecting them together.
I decided not to use Petgraph create (petgraph) directly, but ruther to extract and refactor GraphMap
into my own crate called Safe Graph
(safe-graph). My reasing for that is explained there.
A generic solution for Floyd-Warshall algorithm supporting customization is provided by my own crate Floyd Warshall algorithm
(floyd-warshall-alg). Available customization is described there.
Input:
Reading and parsing input from stdin to Request
instance holding instances of PriceUpdate
and ExchangeRateRequest
structs.
Processing: Constructing a graph, running a customized version of Floyd-Warshall algorithm and forming a Response.
Output:
Writing the Response holding instances of BestRatePath
struct to stdout.
Licensed under the General Public License (GPL), version 3 (LICENSE http://www.gnu.org/licenses/gpl-3.0.en.html).