mirror of
https://github.com/0xrsydn/idx-cli.git
synced 2026-11-07 09:45:36 +00:00
Phase 3c of docs/DESIGN.md. `ownership` handlers are now argument parsing, one idx-core call, and rendering. - investor.rs: Investor (also Idx::investor()) with releases, ticker, entity, search, cross_holders, concentration, flow, changes, graph, unresolved, map_alias, merge_entities, discover, sync, and import. Import orchestration (input resolution, download, SHA-256 dedup, PDF/XLSX/archive parsing, entity resolution, release write) moves from the CLI unchanged. - Typed inputs: ImportSource, HolderSource, ConcentrationRank, and parse_report_family, with the same error messages. - CoreConfig gains an ownership_db override; db::open_db_at opens an explicit path. idx-cli no longer depends on rusqlite, sha2, or ureq at runtime. - Behavior note: an invalid `ticker --source` or `concentration --by` is now rejected before the database file is opened (and created); the error and exit code are unchanged. - Fix: building idx-cli without the ownership feature no longer warns about the ownership-only `blue` style. All 143 goldens unchanged; 170 core + 7 CLI unit tests and 62 CLI tests pass; clippy clean for default, release, testing, and no-default feature sets. Live A/B against main: 16/16 stocks identical; ownership discover got IDX 403 on both (exit 4 vs 1 is the phase 1 change). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
46 lines
1 KiB
Rust
46 lines
1 KiB
Rust
//! idx-core: retrieval and analysis of Indonesian (IDX) market, financial, and
|
|
//! investor data, shared by the `idx` CLI and other frontends.
|
|
//! See docs/DESIGN.md.
|
|
|
|
pub mod analysis;
|
|
pub mod api;
|
|
pub mod cache;
|
|
mod client;
|
|
pub mod config;
|
|
pub mod curl_impersonate;
|
|
pub mod error;
|
|
pub mod financial;
|
|
#[cfg(feature = "ownership")]
|
|
pub mod investor;
|
|
pub mod market;
|
|
#[cfg(feature = "ownership")]
|
|
pub mod ownership;
|
|
|
|
pub use client::{CachePolicy, Fetched, Idx};
|
|
|
|
pub mod runtime {
|
|
use std::fmt::Display;
|
|
use std::sync::atomic::{AtomicBool, Ordering};
|
|
|
|
static QUIET: AtomicBool = AtomicBool::new(false);
|
|
|
|
pub fn set_quiet(quiet: bool) {
|
|
QUIET.store(quiet, Ordering::Relaxed);
|
|
}
|
|
|
|
pub fn is_quiet() -> bool {
|
|
QUIET.load(Ordering::Relaxed)
|
|
}
|
|
|
|
pub fn info(message: impl Display) {
|
|
if !is_quiet() {
|
|
eprintln!("info: {message}");
|
|
}
|
|
}
|
|
|
|
pub fn warn(message: impl Display) {
|
|
if !is_quiet() {
|
|
eprintln!("warning: {message}");
|
|
}
|
|
}
|
|
}
|