Crates.io | cache_cache |
lib.rs | cache_cache |
version | 0.1.1 |
source | src |
created_at | 2023-01-13 12:02:25.660913 |
updated_at | 2023-08-22 14:01:21.149612 |
description | Cache for controlling and reducing IO calls |
homepage | https://pollen-robotics.com/ |
repository | https://github.com/pollen-robotics/cache_cache/ |
max_upload_size | |
id | 757873 |
size | 31,464 |
This caching library has been designed for specific use-cases where:
Typically, its primary use was to retrieve position/speed/temperature/etc from multiple motors using serial communication. In this setup, the motors are daisy chained, and in the protocol used to communicate with them, a specific message can be used to retrieve a register value for multiple motors at once.
Many other caching implementations exist than can better fit other need.
use cache_cache::Cache;
use std::{error::Error, time::Duration};
fn get_position(ids: &[u8]) -> Result<Vec<f64>, Box<dyn Error>> {
// For simplicity, this function always work.
// But it's a mockup for a real world scenario where hardware IO can fail.
Ok(ids.iter().map(|&id| id as f64 * 10.0).collect())
}
fn main() {
let mut present_position = Cache::with_expiry_duration(Duration::from_millis(10));
present_position.insert(10, 0.0);
let pos = present_position
.entries(&[10, 11, 12])
.or_try_insert_with(get_position);
assert!(pos.is_ok());
assert_eq!(pos.unwrap(), vec![&0.0, &110.0, &120.0]);
}
See https://docs.rs/cache_cache for more information on APIs and examples.
This library is licensed under the Apache License 2.0.
It's developed and maintained by Pollen-Robotics. They developped open-source tools for robotics manipulation. Visit https://pollen-robotics.com to learn more or join our Dicord community if you have any questions or want to share your ideas.