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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
//! Serialization trait for cached values.
//!
//! This module provides the [`Cacheable`] trait which defines the serialization
//! requirements for types that can be stored in cache backends.
//!
//! ## Feature-Dependent Bounds
//!
//! The trait has different bounds depending on enabled features:
//!
//! - **Default**: Requires `Serialize + DeserializeOwned + Send + Sync` (serde)
//! - **`rkyv_format`**: Additionally requires rkyv traits for zero-copy deserialization
//!
//! ## Blanket Implementation
//!
//! The trait is automatically implemented for all types that satisfy the bounds,
//! so you don't need to implement it manually. Just derive the required traits:
//!
//! ```ignore
//! #[derive(serde::Serialize, serde::Deserialize)]
//! #[cfg_attr(feature = "rkyv_format", derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize))]
//! struct MyCachedData {
//! value: String,
//! }
//! // MyCachedData automatically implements Cacheable
//! ```
use ;
/// Marker trait for types that can be cached.
///
/// This trait abstracts serialization requirements for cached values.
/// It has a blanket implementation for all types that satisfy the bounds,
/// so you never need to implement it manually.
///
/// # Feature-Dependent Bounds
///
/// ## Without `rkyv_format` (default)
///
/// Requires serde traits for JSON/binary serialization:
/// - `Serialize + DeserializeOwned + Send + Sync`
///
/// ## With `rkyv_format`
///
/// Additionally requires rkyv traits for zero-copy deserialization:
/// - `Archive` - Type can be archived
/// - `Serialize` - Can serialize to rkyv format
/// - `Archived: CheckBytes` - Archived form can be validated
/// - `Archived: Deserialize` - Can deserialize from archived form
///
/// # Example
///
/// ```ignore
/// // Works with default features (serde only)
/// #[derive(serde::Serialize, serde::Deserialize)]
/// struct BasicData {
/// value: String,
/// }
///
/// // Works with rkyv_format feature
/// #[derive(serde::Serialize, serde::Deserialize)]
/// #[derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
/// #[rkyv(check_bytes)]
/// struct RkyvData {
/// value: String,
/// }
/// ```
/// Marker trait for types that can be cached.
///
/// This trait abstracts serialization requirements for cached values.
/// It has a blanket implementation for all types that satisfy the bounds,
/// so you never need to implement it manually.
///
/// # Feature-Dependent Bounds
///
/// ## Without `rkyv_format` (default)
///
/// Requires serde traits for JSON/binary serialization:
/// - `Serialize + DeserializeOwned + Send + Sync`
///
/// ## With `rkyv_format`
///
/// Additionally requires rkyv traits for zero-copy deserialization:
/// - `Archive` - Type can be archived
/// - `Serialize` - Can serialize to rkyv format
/// - `Archived: CheckBytes` - Archived form can be validated
/// - `Archived: Deserialize` - Can deserialize from archived form
///
/// # Example
///
/// ```ignore
/// // Works with default features (serde only)
/// #[derive(serde::Serialize, serde::Deserialize)]
/// struct BasicData {
/// value: String,
/// }
///
/// // Works with rkyv_format feature
/// #[derive(serde::Serialize, serde::Deserialize)]
/// #[derive(rkyv::Archive, rkyv::Serialize, rkyv::Deserialize)]
/// #[rkyv(check_bytes)]
/// struct RkyvData {
/// value: String,
/// }
/// ```