kdeets_lib/
lib.rs

1const HEADER: &str = "Crate versions for";
2const SETUP_HEADER: &str = "Local registry set up for";
3const LINE_CHAR: char = '🭶';
4
5mod crate_versions;
6mod error;
7mod rust_versions;
8mod setup;
9
10pub use crate_versions::CrateVersions;
11pub use error::Error;
12pub use rust_versions::RustVersions;
13pub use setup::Setup;
14
15use tame_index::external::reqwest::blocking::ClientBuilder;
16use tame_index::index::{ComboIndex, RemoteSparseIndex};
17use tame_index::{IndexLocation, IndexUrl, SparseIndex};
18
19pub(crate) fn get_remote_combo_index() -> Result<ComboIndex, tame_index::error::Error> {
20    let index = get_sparse_index()?;
21    let builder = get_client_builder();
22    let client = builder.build()?;
23
24    let remote_index = RemoteSparseIndex::new(index, client);
25
26    Ok(ComboIndex::from(remote_index))
27}
28
29pub(crate) fn get_sparse_index() -> Result<SparseIndex, tame_index::error::Error> {
30    let il = IndexLocation::new(IndexUrl::CratesIoSparse);
31    SparseIndex::new(il)
32}
33
34pub(crate) fn get_client_builder() -> ClientBuilder {
35    let builder = ClientBuilder::new();
36    builder.tls_built_in_root_certs(true)
37}
38
39#[cfg(test)]
40mod tests {
41
42    use std::vec;
43
44    use crate::get_remote_combo_index;
45    use tame_index::{
46        PathBuf,
47        index::{ComboIndex, LocalRegistry},
48    };
49    use tempfile::TempDir;
50
51    const TEST_REGISTRY: &str = "tests/registry";
52
53    pub(crate) fn get_temp_local_registry() -> (TempDir, String) {
54        let temp_dir = tempfile::tempdir().unwrap();
55        println!("Temp dir: {}", temp_dir.path().display());
56        let registry_path = temp_dir.path().join("registry");
57        let registry = registry_path.to_str().unwrap();
58
59        let options = fs_extra::dir::CopyOptions::new();
60
61        let from_path = vec![TEST_REGISTRY];
62
63        let _ = fs_extra::copy_items(&from_path, temp_dir.path().to_str().unwrap(), &options);
64        let _ = fs_extra::copy_items(&from_path, "/tmp/test/", &options);
65
66        (temp_dir, registry.to_string())
67    }
68
69    pub(crate) fn get_test_index(registry: &str) -> Result<ComboIndex, tame_index::error::Error> {
70        let local_registry = LocalRegistry::open(PathBuf::from(registry), false)?;
71
72        Ok(ComboIndex::from(local_registry))
73    }
74
75    #[test]
76    fn test_get_sparse_index_success() {
77        let result = get_remote_combo_index();
78        assert!(result.is_ok());
79        let index = result.unwrap();
80        assert!(matches!(index, ComboIndex::Sparse(_)));
81    }
82
83    #[test]
84    fn test_get_sparse_index_type() {
85        let result = get_remote_combo_index();
86        assert!(matches!(result, Ok(ComboIndex::Sparse(_))));
87    }
88
89    #[test]
90    fn test_sparse_index_error_handling() {
91        let result = get_remote_combo_index();
92        match result {
93            Ok(_) => (),
94            Err(e) => panic!("Expected Ok, got Err: {e:?}"),
95        }
96    }
97}