Struct DetailedCacheStats

Source
pub struct DetailedCacheStats {
    pub total_size_bytes: u64,
    pub file_count: usize,
    pub cache_dir: PathBuf,
    pub max_cache_size: u64,
    pub offline_mode: bool,
    pub files: Vec<CacheFileInfo>,
}
Expand description

Detailed cache statistics with file-level information

Fields§

§total_size_bytes: u64

Total size of all cached files in bytes

§file_count: usize

Number of cached files

§cache_dir: PathBuf

Cache directory path

§max_cache_size: u64

Maximum cache size (0 = unlimited)

§offline_mode: bool

Whether cache is in offline mode

§files: Vec<CacheFileInfo>

Information about individual cached files

Implementations§

Source§

impl DetailedCacheStats

Source

pub fn formatted_size(&self) -> String

Get total size formatted as human-readable string

Examples found in repository?
examples/cache_management_demo.rs (line 89)
9fn main() {
10    println!("=== Enhanced Cache Management Demonstration ===\n");
11
12    // Demonstrate platform-specific cache directory detection
13    println!("=== Platform-Specific Cache Directory =========");
14    match get_cache_dir() {
15        Ok(cache_dir) => {
16            println!("Default cache directory: {}", cache_dir.display());
17            println!("Platform: {}", std::env::consts::OS);
18        }
19        Err(e) => {
20            println!("Error getting cache directory: {}", e);
21        }
22    }
23    println!();
24
25    // Demonstrate environment variable override
26    println!("=== Environment Variable Configuration =========");
27    println!("Set SCIRS2_CACHE_DIR to override default cache location");
28    println!("Set SCIRS2_OFFLINE=true to enable offline mode");
29    if let Ok(cache_env) = std::env::var("SCIRS2_CACHE_DIR") {
30        println!("Custom cache directory: {}", cache_env);
31    } else {
32        println!("Using default cache directory");
33    }
34
35    if let Ok(offline_env) = std::env::var("SCIRS2_OFFLINE") {
36        println!("Offline mode: {}", offline_env);
37    } else {
38        println!("Offline mode: Not set (defaults to false)");
39    }
40    println!();
41
42    // Create a temporary cache for demonstration
43    let temp_dir = tempfile::tempdir().unwrap();
44    let demo_cache_dir = temp_dir.path().join("demo_cache");
45
46    // Demonstrate cache with size limits
47    println!("=== Cache with Size Limits =====================");
48    let mut cache_manager = CacheManager::with_full_config(
49        demo_cache_dir.clone(),
50        50,          // 50 items in memory cache
51        3600,        // 1 hour TTL
52        1024 * 1024, // 1MB disk cache limit
53        false,       // Not in offline mode
54    );
55
56    println!("Created cache with 1MB size limit");
57    println!("Cache directory: {}", demo_cache_dir.display());
58
59    // Add some test data to the cache
60    let cache =
61        DatasetCache::with_full_config(demo_cache_dir.clone(), 50, 3600, 1024 * 1024, false);
62
63    // Write several files of different sizes
64    let small_data = vec![0u8; 1024]; // 1KB
65    let medium_data = vec![1u8; 10240]; // 10KB
66    let large_data = vec![2u8; 102400]; // 100KB
67
68    cache.write_cached("small_file.dat", &small_data).unwrap();
69    cache.write_cached("medium_file.dat", &medium_data).unwrap();
70    cache.write_cached("large_file.dat", &large_data).unwrap();
71
72    println!("Added test files to cache");
73    println!();
74
75    // Demonstrate basic cache statistics
76    println!("=== Basic Cache Statistics ====================");
77    let basic_stats = cache_manager.get_stats();
78    println!("Files: {}", basic_stats.file_count);
79    println!("Total size: {}", basic_stats.formatted_size());
80    println!();
81
82    // Demonstrate detailed cache statistics
83    println!("=== Detailed Cache Statistics ==================");
84    match cache_manager.get_detailed_stats() {
85        Ok(detailed_stats) => {
86            println!("Cache Directory: {}", detailed_stats.cache_dir.display());
87            println!(
88                "Total Size: {} ({} files)",
89                detailed_stats.formatted_size(),
90                detailed_stats.file_count
91            );
92            println!("Max Size: {}", detailed_stats.formatted_max_size());
93            println!("Usage: {:.1}%", detailed_stats.usage_percentage() * 100.0);
94            println!(
95                "Offline Mode: {}",
96                if detailed_stats.offline_mode {
97                    "Enabled"
98                } else {
99                    "Disabled"
100                }
101            );
102
103            if !detailed_stats.files.is_empty() {
104                println!("\nCached Files (sorted by size):");
105                for file in &detailed_stats.files {
106                    println!(
107                        "  {} - {} (modified {})",
108                        file.name,
109                        file.formatted_size(),
110                        file.formatted_modified()
111                    );
112                }
113            }
114        }
115        Err(e) => {
116            println!("Error getting detailed stats: {}", e);
117        }
118    }
119    println!();
120
121    // Demonstrate cache management operations
122    println!("=== Cache Management Operations ===============");
123    println!("Available operations:");
124    println!("1. List cached files");
125    let cached_files = cache_manager.list_cached_files().unwrap();
126    for file in &cached_files {
127        println!("   - {}", file);
128    }
129
130    println!("2. Check if specific files are cached");
131    println!(
132        "   small_file.dat: {}",
133        cache_manager.is_cached("small_file.dat")
134    );
135    println!(
136        "   nonexistent.dat: {}",
137        cache_manager.is_cached("nonexistent.dat")
138    );
139
140    println!("3. Remove specific file");
141    cache_manager.remove("medium_file.dat").unwrap();
142    println!("   Removed medium_file.dat");
143    println!(
144        "   Files remaining: {}",
145        cache_manager.list_cached_files().unwrap().len()
146    );
147    println!();
148
149    // Demonstrate offline mode
150    println!("=== Offline Mode Configuration ================");
151    println!("Current offline mode: {}", cache_manager.is_offline());
152    cache_manager.set_offline_mode(true);
153    println!("Enabled offline mode: {}", cache_manager.is_offline());
154    cache_manager.set_offline_mode(false);
155    println!("Disabled offline mode: {}", cache_manager.is_offline());
156    println!();
157
158    // Demonstrate cache size management
159    println!("=== Cache Size Management =====================");
160    println!(
161        "Current max cache size: {} bytes",
162        cache_manager.max_cache_size()
163    );
164    cache_manager.set_max_cache_size(512 * 1024); // 512KB
165    println!(
166        "Set max cache size to: {} bytes",
167        cache_manager.max_cache_size()
168    );
169
170    // Add a large file that would exceed the new limit
171    let very_large_data = vec![3u8; 400 * 1024]; // 400KB
172    cache
173        .write_cached("very_large_file.dat", &very_large_data)
174        .unwrap();
175
176    let final_stats = cache_manager.get_detailed_stats().unwrap();
177    println!(
178        "Final cache size: {} (should be within limit)",
179        final_stats.formatted_size()
180    );
181    println!(
182        "Final usage: {:.1}%",
183        final_stats.usage_percentage() * 100.0
184    );
185    println!();
186
187    // Demonstrate cache cleanup
188    println!("=== Cache Cleanup ==============================");
189    println!(
190        "Files before cleanup: {}",
191        cache_manager.list_cached_files().unwrap().len()
192    );
193    cache_manager.cleanup_old_files(100 * 1024).unwrap(); // Clean up to fit 100KB
194    let cleanup_stats = cache_manager.get_detailed_stats().unwrap();
195    println!("Files after cleanup: {}", cleanup_stats.file_count);
196    println!("Size after cleanup: {}", cleanup_stats.formatted_size());
197    println!();
198
199    // Demonstrate cache report
200    println!("=== Complete Cache Report ======================");
201    cache_manager.print_cache_report().unwrap();
202    println!();
203
204    // Clear all cache data
205    println!("=== Cache Clearing =============================");
206    cache_manager.clear_all().unwrap();
207    let empty_stats = cache_manager.get_stats();
208    println!("Files after clearing: {}", empty_stats.file_count);
209    println!("Size after clearing: {}", empty_stats.formatted_size());
210    println!();
211
212    // Demonstrate configuration examples
213    println!("=== Configuration Examples =====================");
214    println!("Example configurations for different use cases:");
215    println!();
216
217    println!("1. Development (small cache, frequent cleanup):");
218    println!("   CacheManager::with_full_config(cache_dir, 20, 1800, 50*1024*1024, false)");
219    println!("   - 20 items in memory, 30 min TTL, 50MB disk limit");
220    println!();
221
222    println!("2. Production (large cache, longer retention):");
223    println!("   CacheManager::with_full_config(cache_dir, 500, 86400, 1024*1024*1024, false)");
224    println!("   - 500 items in memory, 24 hour TTL, 1GB disk limit");
225    println!();
226
227    println!("3. Offline environment:");
228    println!("   CacheManager::with_full_config(cache_dir, 100, 3600, 0, true)");
229    println!("   - Offline mode enabled, unlimited disk cache");
230    println!();
231
232    println!("4. Memory-constrained (minimal cache):");
233    println!("   CacheManager::with_full_config(cache_dir, 10, 900, 10*1024*1024, false)");
234    println!("   - 10 items in memory, 15 min TTL, 10MB disk limit");
235    println!();
236
237    println!("=== Cache Management Demo Complete =============");
238}
Source

pub fn formatted_max_size(&self) -> String

Get max cache size formatted as human-readable string

Examples found in repository?
examples/cache_management_demo.rs (line 92)
9fn main() {
10    println!("=== Enhanced Cache Management Demonstration ===\n");
11
12    // Demonstrate platform-specific cache directory detection
13    println!("=== Platform-Specific Cache Directory =========");
14    match get_cache_dir() {
15        Ok(cache_dir) => {
16            println!("Default cache directory: {}", cache_dir.display());
17            println!("Platform: {}", std::env::consts::OS);
18        }
19        Err(e) => {
20            println!("Error getting cache directory: {}", e);
21        }
22    }
23    println!();
24
25    // Demonstrate environment variable override
26    println!("=== Environment Variable Configuration =========");
27    println!("Set SCIRS2_CACHE_DIR to override default cache location");
28    println!("Set SCIRS2_OFFLINE=true to enable offline mode");
29    if let Ok(cache_env) = std::env::var("SCIRS2_CACHE_DIR") {
30        println!("Custom cache directory: {}", cache_env);
31    } else {
32        println!("Using default cache directory");
33    }
34
35    if let Ok(offline_env) = std::env::var("SCIRS2_OFFLINE") {
36        println!("Offline mode: {}", offline_env);
37    } else {
38        println!("Offline mode: Not set (defaults to false)");
39    }
40    println!();
41
42    // Create a temporary cache for demonstration
43    let temp_dir = tempfile::tempdir().unwrap();
44    let demo_cache_dir = temp_dir.path().join("demo_cache");
45
46    // Demonstrate cache with size limits
47    println!("=== Cache with Size Limits =====================");
48    let mut cache_manager = CacheManager::with_full_config(
49        demo_cache_dir.clone(),
50        50,          // 50 items in memory cache
51        3600,        // 1 hour TTL
52        1024 * 1024, // 1MB disk cache limit
53        false,       // Not in offline mode
54    );
55
56    println!("Created cache with 1MB size limit");
57    println!("Cache directory: {}", demo_cache_dir.display());
58
59    // Add some test data to the cache
60    let cache =
61        DatasetCache::with_full_config(demo_cache_dir.clone(), 50, 3600, 1024 * 1024, false);
62
63    // Write several files of different sizes
64    let small_data = vec![0u8; 1024]; // 1KB
65    let medium_data = vec![1u8; 10240]; // 10KB
66    let large_data = vec![2u8; 102400]; // 100KB
67
68    cache.write_cached("small_file.dat", &small_data).unwrap();
69    cache.write_cached("medium_file.dat", &medium_data).unwrap();
70    cache.write_cached("large_file.dat", &large_data).unwrap();
71
72    println!("Added test files to cache");
73    println!();
74
75    // Demonstrate basic cache statistics
76    println!("=== Basic Cache Statistics ====================");
77    let basic_stats = cache_manager.get_stats();
78    println!("Files: {}", basic_stats.file_count);
79    println!("Total size: {}", basic_stats.formatted_size());
80    println!();
81
82    // Demonstrate detailed cache statistics
83    println!("=== Detailed Cache Statistics ==================");
84    match cache_manager.get_detailed_stats() {
85        Ok(detailed_stats) => {
86            println!("Cache Directory: {}", detailed_stats.cache_dir.display());
87            println!(
88                "Total Size: {} ({} files)",
89                detailed_stats.formatted_size(),
90                detailed_stats.file_count
91            );
92            println!("Max Size: {}", detailed_stats.formatted_max_size());
93            println!("Usage: {:.1}%", detailed_stats.usage_percentage() * 100.0);
94            println!(
95                "Offline Mode: {}",
96                if detailed_stats.offline_mode {
97                    "Enabled"
98                } else {
99                    "Disabled"
100                }
101            );
102
103            if !detailed_stats.files.is_empty() {
104                println!("\nCached Files (sorted by size):");
105                for file in &detailed_stats.files {
106                    println!(
107                        "  {} - {} (modified {})",
108                        file.name,
109                        file.formatted_size(),
110                        file.formatted_modified()
111                    );
112                }
113            }
114        }
115        Err(e) => {
116            println!("Error getting detailed stats: {}", e);
117        }
118    }
119    println!();
120
121    // Demonstrate cache management operations
122    println!("=== Cache Management Operations ===============");
123    println!("Available operations:");
124    println!("1. List cached files");
125    let cached_files = cache_manager.list_cached_files().unwrap();
126    for file in &cached_files {
127        println!("   - {}", file);
128    }
129
130    println!("2. Check if specific files are cached");
131    println!(
132        "   small_file.dat: {}",
133        cache_manager.is_cached("small_file.dat")
134    );
135    println!(
136        "   nonexistent.dat: {}",
137        cache_manager.is_cached("nonexistent.dat")
138    );
139
140    println!("3. Remove specific file");
141    cache_manager.remove("medium_file.dat").unwrap();
142    println!("   Removed medium_file.dat");
143    println!(
144        "   Files remaining: {}",
145        cache_manager.list_cached_files().unwrap().len()
146    );
147    println!();
148
149    // Demonstrate offline mode
150    println!("=== Offline Mode Configuration ================");
151    println!("Current offline mode: {}", cache_manager.is_offline());
152    cache_manager.set_offline_mode(true);
153    println!("Enabled offline mode: {}", cache_manager.is_offline());
154    cache_manager.set_offline_mode(false);
155    println!("Disabled offline mode: {}", cache_manager.is_offline());
156    println!();
157
158    // Demonstrate cache size management
159    println!("=== Cache Size Management =====================");
160    println!(
161        "Current max cache size: {} bytes",
162        cache_manager.max_cache_size()
163    );
164    cache_manager.set_max_cache_size(512 * 1024); // 512KB
165    println!(
166        "Set max cache size to: {} bytes",
167        cache_manager.max_cache_size()
168    );
169
170    // Add a large file that would exceed the new limit
171    let very_large_data = vec![3u8; 400 * 1024]; // 400KB
172    cache
173        .write_cached("very_large_file.dat", &very_large_data)
174        .unwrap();
175
176    let final_stats = cache_manager.get_detailed_stats().unwrap();
177    println!(
178        "Final cache size: {} (should be within limit)",
179        final_stats.formatted_size()
180    );
181    println!(
182        "Final usage: {:.1}%",
183        final_stats.usage_percentage() * 100.0
184    );
185    println!();
186
187    // Demonstrate cache cleanup
188    println!("=== Cache Cleanup ==============================");
189    println!(
190        "Files before cleanup: {}",
191        cache_manager.list_cached_files().unwrap().len()
192    );
193    cache_manager.cleanup_old_files(100 * 1024).unwrap(); // Clean up to fit 100KB
194    let cleanup_stats = cache_manager.get_detailed_stats().unwrap();
195    println!("Files after cleanup: {}", cleanup_stats.file_count);
196    println!("Size after cleanup: {}", cleanup_stats.formatted_size());
197    println!();
198
199    // Demonstrate cache report
200    println!("=== Complete Cache Report ======================");
201    cache_manager.print_cache_report().unwrap();
202    println!();
203
204    // Clear all cache data
205    println!("=== Cache Clearing =============================");
206    cache_manager.clear_all().unwrap();
207    let empty_stats = cache_manager.get_stats();
208    println!("Files after clearing: {}", empty_stats.file_count);
209    println!("Size after clearing: {}", empty_stats.formatted_size());
210    println!();
211
212    // Demonstrate configuration examples
213    println!("=== Configuration Examples =====================");
214    println!("Example configurations for different use cases:");
215    println!();
216
217    println!("1. Development (small cache, frequent cleanup):");
218    println!("   CacheManager::with_full_config(cache_dir, 20, 1800, 50*1024*1024, false)");
219    println!("   - 20 items in memory, 30 min TTL, 50MB disk limit");
220    println!();
221
222    println!("2. Production (large cache, longer retention):");
223    println!("   CacheManager::with_full_config(cache_dir, 500, 86400, 1024*1024*1024, false)");
224    println!("   - 500 items in memory, 24 hour TTL, 1GB disk limit");
225    println!();
226
227    println!("3. Offline environment:");
228    println!("   CacheManager::with_full_config(cache_dir, 100, 3600, 0, true)");
229    println!("   - Offline mode enabled, unlimited disk cache");
230    println!();
231
232    println!("4. Memory-constrained (minimal cache):");
233    println!("   CacheManager::with_full_config(cache_dir, 10, 900, 10*1024*1024, false)");
234    println!("   - 10 items in memory, 15 min TTL, 10MB disk limit");
235    println!();
236
237    println!("=== Cache Management Demo Complete =============");
238}
Source

pub fn usage_percentage(&self) -> f64

Get cache usage percentage (0.0-1.0)

Examples found in repository?
examples/cache_management_demo.rs (line 93)
9fn main() {
10    println!("=== Enhanced Cache Management Demonstration ===\n");
11
12    // Demonstrate platform-specific cache directory detection
13    println!("=== Platform-Specific Cache Directory =========");
14    match get_cache_dir() {
15        Ok(cache_dir) => {
16            println!("Default cache directory: {}", cache_dir.display());
17            println!("Platform: {}", std::env::consts::OS);
18        }
19        Err(e) => {
20            println!("Error getting cache directory: {}", e);
21        }
22    }
23    println!();
24
25    // Demonstrate environment variable override
26    println!("=== Environment Variable Configuration =========");
27    println!("Set SCIRS2_CACHE_DIR to override default cache location");
28    println!("Set SCIRS2_OFFLINE=true to enable offline mode");
29    if let Ok(cache_env) = std::env::var("SCIRS2_CACHE_DIR") {
30        println!("Custom cache directory: {}", cache_env);
31    } else {
32        println!("Using default cache directory");
33    }
34
35    if let Ok(offline_env) = std::env::var("SCIRS2_OFFLINE") {
36        println!("Offline mode: {}", offline_env);
37    } else {
38        println!("Offline mode: Not set (defaults to false)");
39    }
40    println!();
41
42    // Create a temporary cache for demonstration
43    let temp_dir = tempfile::tempdir().unwrap();
44    let demo_cache_dir = temp_dir.path().join("demo_cache");
45
46    // Demonstrate cache with size limits
47    println!("=== Cache with Size Limits =====================");
48    let mut cache_manager = CacheManager::with_full_config(
49        demo_cache_dir.clone(),
50        50,          // 50 items in memory cache
51        3600,        // 1 hour TTL
52        1024 * 1024, // 1MB disk cache limit
53        false,       // Not in offline mode
54    );
55
56    println!("Created cache with 1MB size limit");
57    println!("Cache directory: {}", demo_cache_dir.display());
58
59    // Add some test data to the cache
60    let cache =
61        DatasetCache::with_full_config(demo_cache_dir.clone(), 50, 3600, 1024 * 1024, false);
62
63    // Write several files of different sizes
64    let small_data = vec![0u8; 1024]; // 1KB
65    let medium_data = vec![1u8; 10240]; // 10KB
66    let large_data = vec![2u8; 102400]; // 100KB
67
68    cache.write_cached("small_file.dat", &small_data).unwrap();
69    cache.write_cached("medium_file.dat", &medium_data).unwrap();
70    cache.write_cached("large_file.dat", &large_data).unwrap();
71
72    println!("Added test files to cache");
73    println!();
74
75    // Demonstrate basic cache statistics
76    println!("=== Basic Cache Statistics ====================");
77    let basic_stats = cache_manager.get_stats();
78    println!("Files: {}", basic_stats.file_count);
79    println!("Total size: {}", basic_stats.formatted_size());
80    println!();
81
82    // Demonstrate detailed cache statistics
83    println!("=== Detailed Cache Statistics ==================");
84    match cache_manager.get_detailed_stats() {
85        Ok(detailed_stats) => {
86            println!("Cache Directory: {}", detailed_stats.cache_dir.display());
87            println!(
88                "Total Size: {} ({} files)",
89                detailed_stats.formatted_size(),
90                detailed_stats.file_count
91            );
92            println!("Max Size: {}", detailed_stats.formatted_max_size());
93            println!("Usage: {:.1}%", detailed_stats.usage_percentage() * 100.0);
94            println!(
95                "Offline Mode: {}",
96                if detailed_stats.offline_mode {
97                    "Enabled"
98                } else {
99                    "Disabled"
100                }
101            );
102
103            if !detailed_stats.files.is_empty() {
104                println!("\nCached Files (sorted by size):");
105                for file in &detailed_stats.files {
106                    println!(
107                        "  {} - {} (modified {})",
108                        file.name,
109                        file.formatted_size(),
110                        file.formatted_modified()
111                    );
112                }
113            }
114        }
115        Err(e) => {
116            println!("Error getting detailed stats: {}", e);
117        }
118    }
119    println!();
120
121    // Demonstrate cache management operations
122    println!("=== Cache Management Operations ===============");
123    println!("Available operations:");
124    println!("1. List cached files");
125    let cached_files = cache_manager.list_cached_files().unwrap();
126    for file in &cached_files {
127        println!("   - {}", file);
128    }
129
130    println!("2. Check if specific files are cached");
131    println!(
132        "   small_file.dat: {}",
133        cache_manager.is_cached("small_file.dat")
134    );
135    println!(
136        "   nonexistent.dat: {}",
137        cache_manager.is_cached("nonexistent.dat")
138    );
139
140    println!("3. Remove specific file");
141    cache_manager.remove("medium_file.dat").unwrap();
142    println!("   Removed medium_file.dat");
143    println!(
144        "   Files remaining: {}",
145        cache_manager.list_cached_files().unwrap().len()
146    );
147    println!();
148
149    // Demonstrate offline mode
150    println!("=== Offline Mode Configuration ================");
151    println!("Current offline mode: {}", cache_manager.is_offline());
152    cache_manager.set_offline_mode(true);
153    println!("Enabled offline mode: {}", cache_manager.is_offline());
154    cache_manager.set_offline_mode(false);
155    println!("Disabled offline mode: {}", cache_manager.is_offline());
156    println!();
157
158    // Demonstrate cache size management
159    println!("=== Cache Size Management =====================");
160    println!(
161        "Current max cache size: {} bytes",
162        cache_manager.max_cache_size()
163    );
164    cache_manager.set_max_cache_size(512 * 1024); // 512KB
165    println!(
166        "Set max cache size to: {} bytes",
167        cache_manager.max_cache_size()
168    );
169
170    // Add a large file that would exceed the new limit
171    let very_large_data = vec![3u8; 400 * 1024]; // 400KB
172    cache
173        .write_cached("very_large_file.dat", &very_large_data)
174        .unwrap();
175
176    let final_stats = cache_manager.get_detailed_stats().unwrap();
177    println!(
178        "Final cache size: {} (should be within limit)",
179        final_stats.formatted_size()
180    );
181    println!(
182        "Final usage: {:.1}%",
183        final_stats.usage_percentage() * 100.0
184    );
185    println!();
186
187    // Demonstrate cache cleanup
188    println!("=== Cache Cleanup ==============================");
189    println!(
190        "Files before cleanup: {}",
191        cache_manager.list_cached_files().unwrap().len()
192    );
193    cache_manager.cleanup_old_files(100 * 1024).unwrap(); // Clean up to fit 100KB
194    let cleanup_stats = cache_manager.get_detailed_stats().unwrap();
195    println!("Files after cleanup: {}", cleanup_stats.file_count);
196    println!("Size after cleanup: {}", cleanup_stats.formatted_size());
197    println!();
198
199    // Demonstrate cache report
200    println!("=== Complete Cache Report ======================");
201    cache_manager.print_cache_report().unwrap();
202    println!();
203
204    // Clear all cache data
205    println!("=== Cache Clearing =============================");
206    cache_manager.clear_all().unwrap();
207    let empty_stats = cache_manager.get_stats();
208    println!("Files after clearing: {}", empty_stats.file_count);
209    println!("Size after clearing: {}", empty_stats.formatted_size());
210    println!();
211
212    // Demonstrate configuration examples
213    println!("=== Configuration Examples =====================");
214    println!("Example configurations for different use cases:");
215    println!();
216
217    println!("1. Development (small cache, frequent cleanup):");
218    println!("   CacheManager::with_full_config(cache_dir, 20, 1800, 50*1024*1024, false)");
219    println!("   - 20 items in memory, 30 min TTL, 50MB disk limit");
220    println!();
221
222    println!("2. Production (large cache, longer retention):");
223    println!("   CacheManager::with_full_config(cache_dir, 500, 86400, 1024*1024*1024, false)");
224    println!("   - 500 items in memory, 24 hour TTL, 1GB disk limit");
225    println!();
226
227    println!("3. Offline environment:");
228    println!("   CacheManager::with_full_config(cache_dir, 100, 3600, 0, true)");
229    println!("   - Offline mode enabled, unlimited disk cache");
230    println!();
231
232    println!("4. Memory-constrained (minimal cache):");
233    println!("   CacheManager::with_full_config(cache_dir, 10, 900, 10*1024*1024, false)");
234    println!("   - 10 items in memory, 15 min TTL, 10MB disk limit");
235    println!();
236
237    println!("=== Cache Management Demo Complete =============");
238}

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> ErasedDestructor for T
where T: 'static,