sparkle_cache/
lib.rs

1#![deny(
2    clippy::cargo,
3    clippy::nursery,
4    clippy::pedantic,
5    clippy::restriction,
6    rustdoc::missing_crate_level_docs,
7    rustdoc::private_doc_tests,
8    rustdoc::invalid_html_tags,
9    warnings,
10    absolute_paths_not_starting_with_crate,
11    elided_lifetimes_in_paths,
12    explicit_outlives_requirements,
13    keyword_idents,
14    macro_use_extern_crate,
15    meta_variable_misuse,
16    missing_abi,
17    missing_copy_implementations,
18    missing_debug_implementations,
19    missing_docs,
20    non_ascii_idents,
21    noop_method_call,
22    pointer_structural_match,
23    rust_2021_incompatible_closure_captures,
24    rust_2021_incompatible_or_patterns,
25    rust_2021_prefixes_incompatible_syntax,
26    rust_2021_prelude_collisions,
27    single_use_lifetimes,
28    trivial_casts,
29    trivial_numeric_casts,
30    unreachable_pub,
31    unsafe_code,
32    unsafe_op_in_unsafe_fn,
33    unstable_features,
34    unused_crate_dependencies,
35    unused_extern_crates,
36    unused_import_braces,
37    unused_lifetimes,
38    unused_macro_rules,
39    unused_qualifications,
40    variant_size_differences,
41    // Nightly lints:
42    // rustdoc::missing_doc_code_examples,
43    // fuzzy_provenance_casts,
44    // lossy_provenance_casts,
45    // must_not_suspend,
46    // non_exhaustive_omitted_patterns,
47)]
48#![allow(
49    clippy::blanket_clippy_restriction_lints,
50    clippy::exhaustive_structs,
51    clippy::missing_inline_in_public_items,
52    clippy::implicit_return,
53    clippy::unwrap_used,
54    clippy::multiple_inherent_impl,
55    clippy::pattern_type_mismatch,
56    clippy::wildcard_enum_match_arm,
57    clippy::exhaustive_enums,
58    clippy::self_named_module_files,
59    clippy::pub_use,
60    clippy::else_if_without_else
61)]
62#![doc = include_str!("../README.md")]
63
64use core::sync::atomic::{AtomicI64, Ordering};
65
66pub use backend::Backend;
67pub use cache::Cache;
68
69/// The trait to define how to get and set data in the backend
70///
71/// This is for adding support for a backend
72pub mod backend;
73/// The trait providing methods to use the cache
74///
75/// This is for the users of the cache
76pub mod cache;
77/// Definitions of cached structs, used when the cached data is different from
78/// the event data
79pub mod model;
80/// Functions related to testing the implementor of [`Cache`]
81#[cfg(feature = "tests")]
82pub mod tests;
83
84/// Used to create unique IDs when necessary
85static ID_COUNTER: AtomicI64 = AtomicI64::new(1);
86
87/// Returns a unique ID by adding 1 to [`ID_COUNTER`]
88fn unique_id() -> i64 {
89    ID_COUNTER.fetch_add(1, Ordering::Relaxed)
90}