1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
//! # leadforge (CLI)
//!
//! `leadforge` is a command-line tool for extracting high-value leads
//! from external data sources using a concurrent, fault-tolerant pipeline.
//!
//! This binary is responsible for:
//!
//! - parsing CLI arguments
//! - invoking the core execution pipeline
//! - serializing results to JSON
//! - writing output to stdout
//!
//! ---
//!
//! ## Execution Flow
//!
//! ```text
//! CLI input (clap)
//! ↓
//! Config (config.rs)
//! ↓
//! LeadForgeCommand (core domain)
//! ↓
//! run()
//! ↓
//! Vec<Leads>
//! ↓
//! JSON output (stdout)
//! ```
//!
//! ---
//!
//! ## Example
//!
//! ```bash
//! leadforge hacker-news --limit 5 --keyword rust
//! ```
//!
//! Output:
//!
//! ```json
//! [{"id":123,"title":"Rust Developer", ...}]
//! ```
//!
//! The output is designed to be:
//!
//! - machine-readable (JSON)
//! - pipe-friendly (stdout)
//!
//! Example usage in pipelines:
//!
//! ```bash
//! leadforge hn --keyword rust | jq
//! ```
//!
//! ---
//!
//! ## Error Handling
//!
//! Errors are handled using [`anyhow`] at the boundary layer.
//!
//! This allows:
//!
//! - rich context (`.context(...)`)
//! - simplified error propagation
//!
//! Internally, the core library uses structured errors
//! (`LeadForgeError`) which are converted here.
//!
//! ---
//!
//! ## Design Philosophy
//!
//! This file intentionally contains **minimal logic**.
//!
//! Responsibilities are strictly limited to:
//!
//! - orchestration
//! - I/O
//!
//! All business logic lives in the library crate (`leadforge`),
//! making it reusable outside the CLI.
use ;
use Parser;
use run;
use ;
/// Application entry point.
///
/// Parses CLI arguments, executes the selected command,
/// and writes the results as JSON to stdout.
///
/// # Errors
///
/// Returns an error if:
///
/// - CLI parsing fails
/// - the execution pipeline fails
/// - serialization fails
/// - writing to stdout fails
async