fin_model 0.1.1

The provider-neutral model for financial operations.
Documentation
# Crate fin_model

The purpose of this API is to construct a comprehensive data
model for company and market financial information in a coherent
and idiomatic manner, not of a specific service provider's API.

This model can then be populated using requests described with
traits and implemented by a given service provider. Thus, clients
can use the common data model with Rust-native types and idioms
but switch in different providers for different data types, markets,
or qualities of service.

This library only provides types and traits that can be implemented
by a `Provider` that executes requests for financial data such as
price quotes, analyst data, or company information. In the model
we use the term _request trait_ to indicate a trait that contains
functions that make a request for data and which use the common
`RequestResult` response.

> Note: in the model we use the term _request trait_ to indicate 
> a trait that contains functions that make a request for
> data and which use the common `RequestResult` response.
 
## Modules

* `::analysis` core analyst recommendations, `Ratings`, `PriceTarget`, 
  and `EPSConsensus`.
* `::classification` a type, `Code<T>`, and trait, `ClassificationScheme<T>`
  used to model classification schemes.
* `::company` company information, income and balance sheets.
* `::market` a type, `Market`, and trait, `MarketRegistry` used to model
  registries for market/exchange information.
* `::provider` the core trait implemented by providers of the request traits
* `::quote` market quotes, `Quote`, `QuotePrice`, `PriceRange`, and 
  `PriceRangeSeries`.
* `::reporting` core types for reporting functions, `FinancialPeriod` and
  `FiscalPeriod`.
* `::request` result and error types for requests.
* `::symbol` types for market and security symbols.

A common subset of the types declared in the modules above can be
imported from the `::prelude` module. 

## Example

The following uses the `FetchPriceRangeSeries` trait implemented by the
provider to retrieve the last three months price information for the
given stock symbol.

```rust
fn get_stock_price_data(provider: Provider, stock_symbol: Symbol) {
    match provider.last(stock_symbol, SeriesInterval::ThreeMonths) {
        Err(e) => {
            println!("Call failed: {:?}", e);
        }
        Ok(series) => {
            let mut table = Table::new();
            table.add_row(row!["Date", "Open", "Low", "High", "Close", "Volume"]);
            for range in series.series {
                table.add_row(row![
                    range.date.date(),
                    range.data.open,
                    range.data.low,
                    range.data.high,
                    range.data.close,
                    match range.data.volume {
                        None => "N/A".to_string(),
                        Some(v) => v.to_formatted_string(&locale),
                    }
                ]);
            }
            table.printstd();
        }
    }
}
```