pub struct CacheFileInfo {
pub name: String,
pub size_bytes: u64,
pub modified: Option<SystemTime>,
}
Expand description
Information about a cached file
Fields§
§name: String
Name of the cached file
size_bytes: u64
Size in bytes
modified: Option<SystemTime>
Last modified time
Implementations§
Source§impl CacheFileInfo
impl CacheFileInfo
Sourcepub fn formatted_size(&self) -> String
pub fn formatted_size(&self) -> String
Get file size formatted as human-readable string
Examples found in repository?
examples/cache_management_demo.rs (line 109)
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}
Sourcepub fn formatted_modified(&self) -> String
pub fn formatted_modified(&self) -> String
Get formatted modification time
Examples found in repository?
examples/cache_management_demo.rs (line 110)
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}
Trait Implementations§
Source§impl Clone for CacheFileInfo
impl Clone for CacheFileInfo
Source§fn clone(&self) -> CacheFileInfo
fn clone(&self) -> CacheFileInfo
Returns a duplicate of the value. Read more
1.0.0 · Source§const fn clone_from(&mut self, source: &Self)
const fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreAuto Trait Implementations§
impl Freeze for CacheFileInfo
impl RefUnwindSafe for CacheFileInfo
impl Send for CacheFileInfo
impl Sync for CacheFileInfo
impl Unpin for CacheFileInfo
impl UnwindSafe for CacheFileInfo
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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