# 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`, and trait, `ClassificationScheme` 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(); } } } ```