Better config API

This commit is contained in:
daladim 2021-11-16 23:25:41 +01:00
parent 38a44e2773
commit e152b73c51
4 changed files with 12 additions and 11 deletions

View file

@ -1,11 +1,12 @@
//! Support for compile-time configuration options //! Support for compile-time configuration options
use std::sync::{Arc, Mutex};
use once_cell::sync::Lazy; use once_cell::sync::Lazy;
/// Part of the ProdID string that describes the organization (example of a ProdID string: `-//ABC Corporation//My Product//EN`) /// Part of the ProdID string that describes the organization (example of a ProdID string: `-//ABC Corporation//My Product//EN`).
/// You can override it at compile-time with the `KITCHEN_FRIDGE_ICAL_ORG_NAME` environment variable, or keep the default value /// Feel free to override it when initing this library.
pub static ORG_NAME: Lazy<String> = Lazy::new(|| option_env!("KITCHEN_FRIDGE_ICAL_ORG_NAME").unwrap_or("My organization").to_string() ); pub static ORG_NAME: Lazy<Arc<Mutex<String>>> = Lazy::new(|| Arc::new(Mutex::new("My organization".to_string())));
/// Part of the ProdID string that describes the product name (example of a ProdID string: `-//ABC Corporation//My Product//EN`) /// Part of the ProdID string that describes the product name (example of a ProdID string: `-//ABC Corporation//My Product//EN`).
/// You can override it at compile-time with the `KITCHEN_FRIDGE_ICAL_PRODUCT_NAME` environment variable, or keep the default value /// Feel free to override it when initing this library.
pub static PRODUCT_NAME: Lazy<String> = Lazy::new(|| option_env!("KITCHEN_FRIDGE_ICAL_PRODUCT_NAME").unwrap_or("KitchenFridge").to_string() ); pub static PRODUCT_NAME: Lazy<Arc<Mutex<String>>> = Lazy::new(|| Arc::new(Mutex::new("KitchenFridge".to_string())));

View file

@ -104,7 +104,7 @@ mod tests {
COMPLETED:{}\r\n\ COMPLETED:{}\r\n\
STATUS:COMPLETED\r\n\ STATUS:COMPLETED\r\n\
END:VTODO\r\n\ END:VTODO\r\n\
END:VCALENDAR\r\n", *ORG_NAME, *PRODUCT_NAME, uid, s_now, s_now, s_now, s_now); END:VCALENDAR\r\n", ORG_NAME.lock().unwrap(), PRODUCT_NAME.lock().unwrap(), uid, s_now, s_now, s_now, s_now);
assert_eq!(ical, expected_ical); assert_eq!(ical, expected_ical);
} }
@ -124,7 +124,7 @@ mod tests {
SUMMARY:This is a task with ÜTF-8 characters\r\n\ SUMMARY:This is a task with ÜTF-8 characters\r\n\
STATUS:NEEDS-ACTION\r\n\ STATUS:NEEDS-ACTION\r\n\
END:VTODO\r\n\ END:VTODO\r\n\
END:VCALENDAR\r\n", *ORG_NAME, *PRODUCT_NAME, uid, s_now, s_now, s_now); END:VCALENDAR\r\n", ORG_NAME.lock().unwrap(), PRODUCT_NAME.lock().unwrap(), uid, s_now, s_now, s_now);
assert_eq!(ical, expected_ical); assert_eq!(ical, expected_ical);
} }

View file

@ -10,7 +10,7 @@ pub use builder::build_from;
use crate::config::{ORG_NAME, PRODUCT_NAME}; use crate::config::{ORG_NAME, PRODUCT_NAME};
pub fn default_prod_id() -> String { pub fn default_prod_id() -> String {
format!("-//{}//{}//EN", *ORG_NAME, *PRODUCT_NAME) format!("-//{}//{}//EN", ORG_NAME.lock().unwrap(), PRODUCT_NAME.lock().unwrap())
} }

View file

@ -22,9 +22,9 @@
//! See example usage in the `examples/` folder, that you can run using `cargo run --example <example-name>`. \ //! See example usage in the `examples/` folder, that you can run using `cargo run --example <example-name>`. \
//! You can also have a look at `tasklist`, a GUI app that uses `kitchen-fridge` under the hood. //! You can also have a look at `tasklist`, a GUI app that uses `kitchen-fridge` under the hood.
//! //!
//! ## Compile-time configuration options //! ## Configuration options
//! //!
//! Have a look at the [`config`] module to see what options can be overridden at compile-time. //! Have a look at the [`config`] module to see what default options can be overridden.
pub mod traits; pub mod traits;