1pub mod audit;
72pub mod bandwidth;
73pub mod deletion;
74pub mod eviction;
75pub mod garbage_collection;
76pub mod lifecycle;
77pub mod preemption;
78pub mod retention;
79pub mod storage;
80pub mod sync_mode;
81
82pub mod classification;
87pub mod context;
88pub mod context_manager;
89pub mod recovery;
90pub mod registry;
91pub mod sync_queue;
92
93pub use peat_mesh::qos::{QoSClass, QoSPolicy};
98
99pub use audit::{AuditAction, AuditEntry, AuditSummary, EvictionAuditLog};
104pub use bandwidth::{
105 BandwidthAllocation, BandwidthConfig, BandwidthPermit, BandwidthQuota, QuotaConfig,
106};
107pub use deletion::{
108 DeleteResult, DeletionPolicy, DeletionPolicyRegistry, PropagationDirection, Tombstone,
109 TombstoneBatch, TombstoneDecodeError, TombstoneSyncMessage,
110};
111pub use eviction::{EvictionConfig, EvictionController, EvictionResult};
112pub use garbage_collection::{
113 start_periodic_gc, GarbageCollector, GcConfig, GcResult, GcStats, GcStore, ResurrectionPolicy,
114};
115pub use lifecycle::{
116 make_lifecycle_decision, LifecycleDecision, LifecyclePolicies, LifecyclePolicy,
117};
118pub use preemption::{ActiveTransfer, PreemptionController, PreemptionStats, TransferId};
119pub use retention::{RetentionPolicies, RetentionPolicy};
120pub use storage::{
121 ClassStorageMetrics, EvictionCandidate, QoSAwareStorage, StorageMetrics, StoredDocument,
122};
123pub use sync_mode::{SyncMode, SyncModeRegistry};
124
125pub use classification::DataType;
130pub use context::{ContextProfile, MissionContext, QoSClassAdjustment};
131pub use context_manager::{ContextChangeListener, ContextChangeLog, ContextManager};
132pub use recovery::{RecoveryStats, SyncRecovery, UpdateBatch};
133pub use registry::QoSRegistry;
134pub use sync_queue::{PendingSync, PrioritySyncQueue, QueueStats};
135
136use crate::cell::messaging::MessagePriority;
141use crate::storage::file_distribution::TransferPriority;
142
143impl From<QoSClass> for MessagePriority {
144 fn from(qos: QoSClass) -> Self {
145 match qos {
146 QoSClass::Critical => MessagePriority::Critical,
147 QoSClass::High => MessagePriority::High,
148 QoSClass::Normal => MessagePriority::Normal,
149 QoSClass::Low | QoSClass::Bulk => MessagePriority::Low,
150 }
151 }
152}
153
154impl From<MessagePriority> for QoSClass {
155 fn from(priority: MessagePriority) -> Self {
156 match priority {
157 MessagePriority::Critical => QoSClass::Critical,
158 MessagePriority::High => QoSClass::High,
159 MessagePriority::Normal => QoSClass::Normal,
160 MessagePriority::Low => QoSClass::Low,
161 }
162 }
163}
164
165impl From<QoSClass> for TransferPriority {
166 fn from(qos: QoSClass) -> Self {
167 match qos {
168 QoSClass::Critical => TransferPriority::Critical,
169 QoSClass::High => TransferPriority::High,
170 QoSClass::Normal => TransferPriority::Normal,
171 QoSClass::Low | QoSClass::Bulk => TransferPriority::Low,
172 }
173 }
174}
175
176impl From<TransferPriority> for QoSClass {
177 fn from(priority: TransferPriority) -> Self {
178 match priority {
179 TransferPriority::Critical => QoSClass::Critical,
180 TransferPriority::High => QoSClass::High,
181 TransferPriority::Normal => QoSClass::Normal,
182 TransferPriority::Low => QoSClass::Low,
183 }
184 }
185}
186
187#[cfg(test)]
188mod tests {
189 use super::*;
190
191 #[test]
192 fn test_message_priority_conversion() {
193 assert_eq!(
195 MessagePriority::from(QoSClass::Critical),
196 MessagePriority::Critical
197 );
198 assert_eq!(MessagePriority::from(QoSClass::High), MessagePriority::High);
199 assert_eq!(
200 MessagePriority::from(QoSClass::Normal),
201 MessagePriority::Normal
202 );
203 assert_eq!(MessagePriority::from(QoSClass::Low), MessagePriority::Low);
204 assert_eq!(MessagePriority::from(QoSClass::Bulk), MessagePriority::Low);
205
206 assert_eq!(
208 QoSClass::from(MessagePriority::Critical),
209 QoSClass::Critical
210 );
211 assert_eq!(QoSClass::from(MessagePriority::High), QoSClass::High);
212 assert_eq!(QoSClass::from(MessagePriority::Normal), QoSClass::Normal);
213 assert_eq!(QoSClass::from(MessagePriority::Low), QoSClass::Low);
214 }
215
216 #[test]
217 fn test_transfer_priority_conversion() {
218 assert_eq!(
220 TransferPriority::from(QoSClass::Critical),
221 TransferPriority::Critical
222 );
223 assert_eq!(
224 TransferPriority::from(QoSClass::High),
225 TransferPriority::High
226 );
227 assert_eq!(
228 TransferPriority::from(QoSClass::Normal),
229 TransferPriority::Normal
230 );
231 assert_eq!(TransferPriority::from(QoSClass::Low), TransferPriority::Low);
232 assert_eq!(
233 TransferPriority::from(QoSClass::Bulk),
234 TransferPriority::Low
235 );
236
237 assert_eq!(
239 QoSClass::from(TransferPriority::Critical),
240 QoSClass::Critical
241 );
242 assert_eq!(QoSClass::from(TransferPriority::High), QoSClass::High);
243 assert_eq!(QoSClass::from(TransferPriority::Normal), QoSClass::Normal);
244 assert_eq!(QoSClass::from(TransferPriority::Low), QoSClass::Low);
245 }
246}