rocket/request/atomic_method.rs
1use crate::http::Method;
2
3pub struct AtomicMethod(ref_swap::RefSwap<'static, Method>);
4
5impl AtomicMethod {
6 #[inline]
7 pub fn new(value: Method) -> Self {
8 Self(ref_swap::RefSwap::new(value.as_ref()))
9 }
10
11 #[inline]
12 pub fn load(&self) -> Method {
13 *self.0.load(std::sync::atomic::Ordering::Acquire)
14 }
15
16 #[inline]
17 pub fn set(&mut self, new: Method) {
18 *self = Self::new(new);
19 }
20
21 #[inline]
22 pub fn store(&self, new: Method) {
23 self.0.store(new.as_ref(), std::sync::atomic::Ordering::Release)
24 }
25}
26
27impl Clone for AtomicMethod {
28 fn clone(&self) -> Self {
29 let inner = self.0.load(std::sync::atomic::Ordering::Acquire);
30 Self(ref_swap::RefSwap::new(inner))
31 }
32}