---
source: varnish-macros/src/tests.rs
---
mod obj2 {
#[allow(non_snake_case, unused_imports, unused_qualifications, unused_variables)]
#[allow(clippy::needless_question_mark, clippy::new_without_default)]
#[automatically_derived]
mod varnish_generated {
use std::ffi::{c_char, c_int, c_uint, c_void, CStr};
use std::ptr::null;
use varnish::ffi::{
VCL_BACKEND, VCL_BLOB, VCL_BOOL, VCL_DURATION, VCL_INT, VCL_IP, VCL_PROBE,
VCL_REAL, VCL_STRING, VCL_SUB, VCL_TIME, VCL_VOID, VMOD_ABI_Version,
VclEvent, vmod_data, vmod_priv, vrt_ctx, VMOD_PRIV_METHODS_MAGIC,
vmod_priv_methods,
};
use varnish::vcl::{Ctx, IntoVCL, PerVclState, Workspace};
use super::*;
static PRIV_VCL_METHODS: vmod_priv_methods = vmod_priv_methods {
magic: VMOD_PRIV_METHODS_MAGIC,
type_: c"PerVcl".as_ptr(),
fini: Some(vmod_priv::on_fini_per_vcl::<PerVcl>),
};
#[repr(C)]
struct arg_vmod_obj2_Obj1_obj1 {
__vp: *mut vmod_priv,
valid_val: c_char,
val: VCL_INT,
}
unsafe extern "C" fn vmod_c_Obj1_obj1(
__ctx: *mut vrt_ctx,
__objp: *mut *mut Obj1,
__vcl_name: *const c_char,
__args: *const arg_vmod_obj2_Obj1_obj1,
) {
let __args = __args
.as_ref()
.expect("optional args pointer must not be null");
let mut __obj_per_vcl = (*__args.__vp).take_per_vcl::<PerVcl>();
let __result = Box::new(
super::Obj1::obj1(
&mut __obj_per_vcl.user_data,
if __args.valid_val != 0 { __args.val.into() } else { None },
),
);
*__objp = Box::into_raw(__result);
(*__args.__vp).put(__obj_per_vcl, &PRIV_VCL_METHODS);
}
unsafe extern "C" fn vmod_c_Obj1__fini(__objp: *mut *mut Obj1) {
drop(Box::from_raw(*__objp));
*__objp = ::std::ptr::null_mut();
}
unsafe extern "C" fn vmod_c_Obj2_obj2(
__ctx: *mut vrt_ctx,
__objp: *mut *mut Obj2,
__vcl_name: *const c_char,
__vp: *mut vmod_priv,
val: VCL_INT,
) {
let mut __obj_per_vcl = (*__vp).take_per_vcl::<PerVcl>();
let __result = Box::new(
super::Obj2::obj2(&mut __obj_per_vcl.user_data, val.into()),
);
*__objp = Box::into_raw(__result);
(*__vp).put(__obj_per_vcl, &PRIV_VCL_METHODS);
}
unsafe extern "C" fn vmod_c_Obj2__fini(__objp: *mut *mut Obj2) {
drop(Box::from_raw(*__objp));
*__objp = ::std::ptr::null_mut();
}
#[repr(C)]
struct arg_vmod_obj2_Obj3_obj3 {
__vp: *mut vmod_priv,
valid_val: c_char,
val: VCL_INT,
}
unsafe extern "C" fn vmod_c_Obj3_obj3(
__ctx: *mut vrt_ctx,
__objp: *mut *mut Obj3,
__vcl_name: *const c_char,
__args: *const arg_vmod_obj2_Obj3_obj3,
) {
let mut __ctx = Ctx::from_ptr(__ctx);
let __args = __args
.as_ref()
.expect("optional args pointer must not be null");
let mut __obj_per_vcl = (*__args.__vp).take_per_vcl::<PerVcl>();
let __result = Box::new(
super::Obj3::obj3(
&mut __ctx,
&mut __obj_per_vcl.user_data,
if __args.valid_val != 0 { __args.val.into() } else { None },
),
);
*__objp = Box::into_raw(__result);
(*__args.__vp).put(__obj_per_vcl, &PRIV_VCL_METHODS);
}
unsafe extern "C" fn vmod_c_Obj3__fini(__objp: *mut *mut Obj3) {
drop(Box::from_raw(*__objp));
*__objp = ::std::ptr::null_mut();
}
unsafe extern "C" fn vmod_c_Obj4_obj4(
__ctx: *mut vrt_ctx,
__objp: *mut *mut Obj4,
__vcl_name: *const c_char,
__vp: *mut vmod_priv,
val: VCL_INT,
) {
let mut __ctx = Ctx::from_ptr(__ctx);
let mut __obj_per_vcl = (*__vp).take_per_vcl::<PerVcl>();
let __result = Box::new(
super::Obj4::obj4(&mut __ctx, &mut __obj_per_vcl.user_data, val.into()),
);
*__objp = Box::into_raw(__result);
(*__vp).put(__obj_per_vcl, &PRIV_VCL_METHODS);
}
unsafe extern "C" fn vmod_c_Obj4__fini(__objp: *mut *mut Obj4) {
drop(Box::from_raw(*__objp));
*__objp = ::std::ptr::null_mut();
}
#[repr(C)]
pub struct VmodExports {
vmod_c_Obj1_obj1: Option<
unsafe extern "C" fn(
__ctx: *mut vrt_ctx,
__objp: *mut *mut Obj1,
__vcl_name: *const c_char,
__args: *const arg_vmod_obj2_Obj1_obj1,
),
>,
vmod_c_Obj1__fini: Option<unsafe extern "C" fn(__objp: *mut *mut Obj1)>,
vmod_c_Obj2_obj2: Option<
unsafe extern "C" fn(
__ctx: *mut vrt_ctx,
__objp: *mut *mut Obj2,
__vcl_name: *const c_char,
__vp: *mut vmod_priv,
val: VCL_INT,
),
>,
vmod_c_Obj2__fini: Option<unsafe extern "C" fn(__objp: *mut *mut Obj2)>,
vmod_c_Obj3_obj3: Option<
unsafe extern "C" fn(
__ctx: *mut vrt_ctx,
__objp: *mut *mut Obj3,
__vcl_name: *const c_char,
__args: *const arg_vmod_obj2_Obj3_obj3,
),
>,
vmod_c_Obj3__fini: Option<unsafe extern "C" fn(__objp: *mut *mut Obj3)>,
vmod_c_Obj4_obj4: Option<
unsafe extern "C" fn(
__ctx: *mut vrt_ctx,
__objp: *mut *mut Obj4,
__vcl_name: *const c_char,
__vp: *mut vmod_priv,
val: VCL_INT,
),
>,
vmod_c_Obj4__fini: Option<unsafe extern "C" fn(__objp: *mut *mut Obj4)>,
}
pub static VMOD_EXPORTS: VmodExports = VmodExports {
vmod_c_Obj1_obj1: Some(vmod_c_Obj1_obj1),
vmod_c_Obj1__fini: Some(vmod_c_Obj1__fini),
vmod_c_Obj2_obj2: Some(vmod_c_Obj2_obj2),
vmod_c_Obj2__fini: Some(vmod_c_Obj2__fini),
vmod_c_Obj3_obj3: Some(vmod_c_Obj3_obj3),
vmod_c_Obj3__fini: Some(vmod_c_Obj3__fini),
vmod_c_Obj4_obj4: Some(vmod_c_Obj4_obj4),
vmod_c_Obj4__fini: Some(vmod_c_Obj4__fini),
};
#[allow(non_upper_case_globals)]
#[no_mangle]
pub static Vmod_obj2_Data: vmod_data = vmod_data {
vrt_major: 0,
vrt_minor: 0,
file_id: c"c90ca6b4ec2f9db8e6a3d620e0e530af19a24ef8a10aa41d62e9e1cb05b73027"
.as_ptr(),
name: c"obj2".as_ptr(),
func_name: c"Vmod_vmod_obj2_Func".as_ptr(),
func_len: ::std::mem::size_of::<VmodExports>() as c_int,
func: &VMOD_EXPORTS as *const _ as *const c_void,
abi: VMOD_ABI_Version.as_ptr(),
json: JSON.as_ptr(),
proto: null(),
vcs: c"".as_ptr(),
version: c"".as_ptr(),
};
const JSON: &CStr = c"(moved to @json.snap files)";
}
use super::*;
use varnish::vcl::Ctx;
impl Obj1 {
pub fn obj1(vcl: &mut Option<Box<PerVcl>>, val: Option<i64>) -> Self {
Self
}
}
impl Obj2 {
pub fn obj2(vcl: &mut Option<Box<PerVcl>>, val: i64) -> Self {
Self
}
}
impl Obj3 {
pub fn obj3(
ctx: &mut Ctx,
vcl: &mut Option<Box<PerVcl>>,
val: Option<i64>,
) -> Self {
Self
}
}
impl Obj4 {
pub fn obj4(ctx: &mut Ctx, vcl: &mut Option<Box<PerVcl>>, val: i64) -> Self {
Self
}
}
}