cache.rs 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. // -*- coding: utf-8 -*-
  2. //
  3. // Simple CMS
  4. //
  5. // Copyright (C) 2011-2024 Michael Büsch <m@bues.ch>
  6. //
  7. // Licensed under the Apache License version 2.0
  8. // or the MIT license, at your option.
  9. // SPDX-License-Identifier: Apache-2.0 OR MIT
  10. #![allow(dead_code)] //TODO
  11. use cms_ident::Ident;
  12. use lru::LruCache;
  13. use tokio::sync::Mutex;
  14. #[derive(Clone, PartialEq, Eq, Hash, Debug)]
  15. enum CacheKey {
  16. //TODO
  17. Page(Ident),
  18. }
  19. #[derive(Debug)]
  20. enum CacheValue {
  21. //TODO
  22. Blob(Vec<u8>),
  23. }
  24. pub struct CmsCache {
  25. cache: Option<Mutex<LruCache<CacheKey, CacheValue>>>,
  26. }
  27. impl CmsCache {
  28. pub fn new(cache_size: usize) -> Self {
  29. let cache = if cache_size == 0 {
  30. None
  31. } else {
  32. let cache_size = cache_size.try_into().unwrap();
  33. Some(Mutex::new(LruCache::new(cache_size)))
  34. };
  35. Self { cache }
  36. }
  37. pub async fn clear(&self) {
  38. if let Some(cache) = &self.cache {
  39. let mut cache = cache.lock().await;
  40. if !cache.is_empty() {
  41. cache.clear();
  42. println!("Backend cache cleared.");
  43. }
  44. }
  45. }
  46. }
  47. // vim: ts=4 sw=4 expandtab