varnish_sys/
validate.rs

1use crate::ffi::{
2    director, req, sess, vrt_ctx, ws, DIRECTOR_MAGIC, REQ_MAGIC, SESS_MAGIC, VCL_BACKEND,
3    VRT_CTX_MAGIC, WS_MAGIC,
4};
5
6pub unsafe fn validate_vrt_ctx(ctxp: *const vrt_ctx) -> &'static vrt_ctx {
7    let val = ctxp.as_ref().unwrap();
8    assert_eq!(val.magic, VRT_CTX_MAGIC);
9    val
10}
11
12pub unsafe fn validate_director(be: VCL_BACKEND) -> &'static director {
13    let val = be.0.as_ref().unwrap();
14    assert_eq!(val.magic, DIRECTOR_MAGIC);
15    val
16}
17
18pub unsafe fn validate_ws(wsp: *mut ws) -> &'static mut ws {
19    let val = wsp.as_mut().unwrap();
20    assert_eq!(val.magic, WS_MAGIC);
21    val
22}
23
24impl vrt_ctx {
25    pub fn validated_req(&mut self) -> &mut req {
26        let val = unsafe { self.req.as_mut().unwrap() };
27        assert_eq!(val.magic, REQ_MAGIC);
28        val
29    }
30}
31
32impl req {
33    pub fn validated_session(&mut self) -> &sess {
34        let val = unsafe { self.sp.as_ref().unwrap() };
35        assert_eq!(val.magic, SESS_MAGIC);
36        val
37    }
38}
39
40#[cfg(not(varnishsys_6))]
41pub use version_after_v6::*;
42
43#[cfg(not(varnishsys_6))]
44mod version_after_v6 {
45    use crate::ffi::{
46        self, director, vcldir, vfp_ctx, vfp_entry, vrt_ctx, VCLDIR_MAGIC, VFP_CTX_MAGIC,
47        VFP_ENTRY_MAGIC,
48    };
49    use crate::vcl::{DeliveryFilters, FetchFilters};
50
51    pub unsafe fn validate_vfp_ctx(ctxp: *mut vfp_ctx) -> &'static mut vfp_ctx {
52        let val = ctxp.as_mut().unwrap();
53        assert_eq!(val.magic, VFP_CTX_MAGIC);
54        val
55    }
56
57    pub unsafe fn validate_vfp_entry(vfep: *mut vfp_entry) -> &'static mut vfp_entry {
58        let val = vfep.as_mut().unwrap();
59        assert_eq!(val.magic, VFP_ENTRY_MAGIC);
60        val
61    }
62
63    pub unsafe fn validate_vdir(be: &director) -> &'static mut vcldir {
64        let val = be.vdir.as_mut().unwrap();
65        assert_eq!(val.magic, VCLDIR_MAGIC);
66        val
67    }
68
69    impl vrt_ctx {
70        #[expect(clippy::vec_box)] // FIXME: we may want to rethink this
71        pub fn fetch_filters<'c, 'f>(
72            &'c self,
73            filters: &'f mut Vec<Box<ffi::vfp>>,
74        ) -> FetchFilters<'c, 'f> {
75            FetchFilters::<'c, 'f>::new(self, filters)
76        }
77
78        #[expect(clippy::vec_box)] // FIXME: we may want to rethink this
79        pub fn delivery_filters<'c, 'f>(
80            &'c self,
81            filters: &'f mut Vec<Box<ffi::vdp>>,
82        ) -> DeliveryFilters<'c, 'f> {
83            DeliveryFilters::<'c, 'f>::new(self, filters)
84        }
85    }
86}