Releases: borsaorg/borsa
Releases · borsaorg/borsa
v0.2.0
Added
- New crate
borsa-typesfor shared domain types and reports used across the
workspace (configuration, connector keys, attribution, and report envelopes). - Unified routing policy for provider and exchange ordering:
borsa-types::routing_policy::{RoutingPolicy, RoutingPolicyBuilder}with
composable global/kind/symbol/exchange rules and an optionalstrictflag.- Exchange preferences are used for search de-duplication (Symbol > Kind > Global).
BorsaConnector::key()helper for typed connector keys when building policies.BorsaError::StrictSymbolsRejectedto surface strict policy exclusions in streaming.- Full serde support for
BorsaConfigenums andConnectorKeyto enable config-as-data.
Breaking Change
- Router download API redesigned for clarity and richer context:
DownloadResponse.history: HashMap<Symbol, HistoryResponse>replaced by
DownloadResponse.entries: Vec<DownloadEntry>where each entry includes the
instrumentand itshistory.- Tests updated to assert over
entriesinstead of map lookups.
- Unified error moved to
borsa-types::BorsaErrorand now derivesSerialize/Deserialize.- Capability fields on
BorsaError::{Unsupported,ProviderTimeout,RequestTimeout,AllProvidersTimedOut}
are nowStringinstead of&'static str. - Report envelopes (
InfoReport,SearchReport,DownloadReport) changewarnings
fromVec<String>toVec<BorsaError>and propagate structured errors instead of strings.
- Capability fields on
borsa-core::errormodule removed; importBorsaErrorviaborsa_core::types::BorsaError.- Builder APIs
prefer_for_kind(...)andprefer_symbol(...)were removed and
replaced by a unifiedrouting_policy(...)configuration built with
RoutingPolicyBuilder. Update builder calls and tests accordingly. - borsa-yfinance:
YfConnector::KEYconstant is replaced byBorsaConnector::key()
orYfConnector::key_static()for constructing typed keys.
Changed
- Moved configuration (
BorsaConfig,BackoffConfig), fetch/merge strategies,
connector key, and attribution/span types intoborsa-typesand re-exported
them fromborsa/borsa-core. - Routers now preserve connector-tagged errors in report
warnings. - router/history: attribution is now derived from the merged timeline using
first-wins per timestamp; spans group contiguous provider segments regardless
of cadence gaps for clearer provenance. - examples: switch fixed epoch timestamps to recent 00:00 UTC dates for
readability and stability across runs; compute daily candle counts explicitly. - examples: implement
supports_kindon mock connectors to match the current
connector trait. - quote routing: enforce instrument exchange on successful quotes; exchange
mismatch is treated asNotFoundto enable priority fallback/latency racing. - search: de-duplicate cross-provider results by symbol using configured
exchange preferences (Symbol > Kind > Global) while preserving traversal order. - streaming: assign symbols per provider subset based on routing policy and drop
updates for unassigned symbols; strict rules can proactively reject symbols. BorsaConfignow carries a unifiedrouting_policyand is fully
Serialize/Deserializefor external configuration.
Fixed
- router/history: avoid fragmented or misleading attribution when providers have
gaps or differing cadences by building runs on the global merged sequence.
Removed
- Deleted
borsa/src/attrib.rs; attribution types now live inborsa-types. - Deleted
borsa-core/src/error.rs; error type lives inborsa-types.
Dependencies
- Bump
pafttov0.6.0. - Bump
yfinance-rstov0.6.0.
v0.1.2
Added
- Optional tracing feature across the workspace:
borsa,borsa-core, andborsa-yfinanceexpose atracingfeature flag- Router entry points and core orchestration in
borsaemit spans when enabled borsa-yfinanceinstruments all public provider endpoints (quotes, history, search, profile, fundamentals, options, analysis, holders, ESG, news, streaming)
- New example
examples/examples/00_tracing.rsshowing how to initializetracing_subscriberand view spans
Documentation
- Updated
README.md,borsa/README.md, andborsa-yfinance/README.mddescribing observability usage and run commands
Fixed
- router: stream startup now fails if any connector fails to initialize, aborting
spawned tasks and returning a consolidated error instead of partially starting. - router/info: suppress warnings for optional data in info report by filtering
outUnsupportedandNotFounderrors; only actionable errors are retained. - router/history: validate per-provider candle currencies; error on inconsistent
series; ignore providers with no currency data when determining majority currency. - router/search: return
Unsupportedwhen no providers support the requested
capability; ignore non-attempted connectors in result merging and error
aggregation. - core: correct
merge_historyadjusted flag semantics to gate on the first
contributing response and require all contributing responses to be adjusted. - core: ensure
merge_history.metafalls back to the first available meta when
no candles contribute to the merged series, preserving timezone context. - borsa-mock: replace blocking
std::thread::sleepwith non-blocking
tokio::time::sleepin TIMEOUT simulation to avoid blocking the async runtime.
Dependencies
- Bump
pafttov0.5.2. - Bump
yfinance-rstov0.5.2. - Bump
syntov2.0.107.
v0.1.1
Fixed
- borsa-yfinance: Expose ISIN capability via
IsinProviderandas_isin_providersoborsa::Borsa::isinroutes correctly.
Changed
- borsa-core: Re-export dataframe traits from
paft::core::dataframe(replacingpaft-utilspath).
Release v0.1.0
Initial release of borsa! 🎉