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
124
125
126
127
128
129
//! Convenience wrapper functions for `search_repositories` functionality
use ;
use StreamExt;
/// Convenience function to search GitHub repositories with a simple function call.
///
/// This wraps the more verbose `GithubSearch` API with a simple async function
/// that returns results directly instead of requiring stream handling.
///
/// # Arguments
///
/// * `token` - GitHub personal access token
/// * `query` - Search query parameters
///
/// # Returns
///
/// Returns a `SearchResult<Output>` containing repository results and metadata.
///
/// # Example
///
/// ```rust,no_run
/// use gitgix::{search_repositories, SearchQuery};
/// use chrono::Utc;
///
/// #[tokio::main]
/// async fn main() -> Result<(), Box<dyn std::error::Error>> {
/// let token = std::env::var("GITHUB_TOKEN")?;
///
/// let query = SearchQuery {
/// terms: vec!["rust".to_string(), "web".to_string()],
/// language: Some("Rust".to_string()),
/// min_stars: 100,
/// license: None,
/// created_after: None,
/// pushed_after: None,
/// topic: None,
/// user: None,
/// org: None,
/// exclude_forks: true,
/// exclude_archived: true,
/// };
///
/// let output = gitgix::search_repositories(&token, query).await?;
///
/// println!("Found {} repositories", output.results.len());
/// for repo in output.results {
/// println!("- {}: {} stars", repo.name, repo.stars);
///
/// if let Some(metrics) = repo.local_metrics {
/// println!(" Vulnerable deps: {}", metrics.dependency_metrics.vulnerable_dependencies);
/// println!(" Outdated deps: {}", metrics.dependency_metrics.outdated_dependencies);
/// }
/// }
///
/// Ok(())
/// }
/// ```
pub async
/// Convenience function to search GitHub repositories with custom configuration.
///
/// Like `search_repositories()` but allows specifying custom `SearchConfig` for
/// fine-tuning caching, concurrency, timeouts, etc.
///
/// # Arguments
///
/// * `token` - GitHub personal access token
/// * `query` - Search query parameters
/// * `config` - Custom search configuration
///
/// # Returns
///
/// Returns a `SearchResult<Output>` containing repository results and metadata.
///
/// # Example
///
/// ```rust,no_run
/// use gitgix::{search_repositories_with_config, SearchQuery, SearchConfig};
///
/// #[tokio::main]
/// async fn main() -> Result<(), Box<dyn std::error::Error>> {
/// let token = std::env::var("GITHUB_TOKEN")?;
///
/// let query = SearchQuery {
/// terms: vec!["rust".to_string()],
/// language: Some("Rust".to_string()),
/// min_stars: 1000,
/// ..Default::default()
/// };
///
/// let config = SearchConfig {
/// concurrency_limit: 5,
/// cache_capacity: 200,
/// ..Default::default()
/// };
///
/// let output = gitgix::search_repositories_with_config(&token, query, config).await?;
///
/// println!("Cache hit rate: {:.1}%", output.metadata.cache_hit_rate * 100.0);
///
/// Ok(())
/// }
/// ```
pub async