1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
// This software is available under the Apache-2.0 license.
// See https://www.apache.org/licenses/LICENSE-2.0.txt for full text.
//
// Copyright (c) 2024, Gluu, Inc.
//! Data API trait and supporting types for the `DataStore`.
use Duration;
use ;
use Value;
use DataEntry;
use DataError;
/// Statistics about the `DataStore`.
///
/// Provides insight into the current state and usage of the data store,
/// including memory usage metrics and capacity information.
/// Trait defining the public API for data store operations.
///
/// This trait provides a consistent interface for pushing, retrieving,
/// and managing data in the store. All operations are thread-safe.
///
/// The [`Cedarling`](crate::Cedarling) struct implements this trait, providing
/// access to the data store through the main application instance.
///
/// # Example
///
/// ```no_run
/// use cedarling::{Cedarling, DataApi, DataError};
/// use serde_json::json;
/// use std::time::Duration;
///
/// fn use_data_api(cedarling: &Cedarling) -> Result<(), DataError> {
/// // Push data with a 5-minute TTL
/// cedarling.push_data_ctx(
/// "user_roles",
/// json!(["admin", "editor"]),
/// Some(Duration::from_secs(300)),
/// )?;
///
/// // Retrieve data
/// if let Some(roles) = cedarling.get_data_ctx("user_roles")? {
/// println!("User roles: {}", roles);
/// }
///
/// // List all entries with metadata
/// for entry in cedarling.list_data_ctx()? {
/// println!("Key: {}, Type: {:?}", entry.key, entry.data_type);
/// }
///
/// // Get store statistics
/// let stats = cedarling.get_stats_ctx()?;
/// println!("Entries: {}/{}", stats.entry_count, stats.max_entries);
///
/// // Remove data
/// cedarling.remove_data_ctx("user_roles")?;
///
/// // Clear all data
/// cedarling.clear_data_ctx()?;
///
/// Ok(())
/// }
/// ```