22
33const std = @import ("std" );
44const backend = @import ("backends/backend.zig" );
5- const wasmer = @import ("backends/wasmer.zig " );
5+ const options = @import ("options " );
66const Policy = @import ("policy.zig" ).Policy ;
77const MemoryManager = @import ("memory/manager.zig" ).MemoryManager ;
88
9+ const BackendImpl = switch (options .backend ) {
10+ .wasmer = > @import ("backends/wasmer.zig" ).WasmerBackend ,
11+ .zware = > @import ("backends/zware.zig" ).ZwareBackend ,
12+ };
13+ const LogLevel = switch (options .backend ) {
14+ .wasmer = > @import ("backends/wasmer.zig" ).LogLevel ,
15+ .zware = > @import ("backends/zware.zig" ).LogLevel ,
16+ };
17+
918/// A live OPA WASM instance ready for policy evaluation.
1019pub const Instance = struct {
1120 const Self = @This ();
@@ -124,10 +133,10 @@ pub const Instance = struct {
124133 return self .evaluateById (entrypoint_id , input_json );
125134 }
126135
127- fn log (self : * Self , level : @import ( "backends/wasmer.zig" ). LogLevel , comptime fmt : []const u8 , args : anytype ) void {
136+ fn log (self : * Self , level : LogLevel , comptime fmt : []const u8 , args : anytype ) void {
128137 var buf : [256 ]u8 = undefined ;
129138 const msg = std .fmt .bufPrint (& buf , fmt , args ) catch return ;
130- self .getWasmerBackend ().opa_context .log (level , msg );
139+ self .getBackend ().opa_context .log (level , msg );
131140 }
132141
133142 /// Looks up a builtin function name by its numeric ID.
@@ -141,9 +150,9 @@ pub const Instance = struct {
141150
142151 /// Evaluates a policy by entrypoint ID with the given JSON input.
143152 pub fn evaluateById (self : * Self , entrypoint_id : u32 , input_json : []const u8 ) ! []const u8 {
144- const wasmer_backend = self .getWasmerBackend ();
145- wasmer_backend .setBuiltins (& self .builtins );
146- wasmer_backend .setOpaFunctions (
153+ const backend_impl = self .getBackend ();
154+ backend_impl .setBuiltins (& self .builtins );
155+ backend_impl .setOpaFunctions (
147156 self .memory_manager .opa_malloc_fn ,
148157 self .memory_manager .opa_json_parse_fn ,
149158 self .memory_manager .opa_json_dump_fn ,
@@ -205,18 +214,18 @@ pub const Instance = struct {
205214 } || MemoryManager .Error ;
206215
207216 pub fn wasAborted (self : * Self ) bool {
208- return self .getWasmerBackend ().wasAborted ();
217+ return self .getBackend ().wasAborted ();
209218 }
210219
211220 pub fn getAbortMessage (self : * Self ) ? []const u8 {
212- return self .getWasmerBackend ().getAbortMessage ();
221+ return self .getBackend ().getAbortMessage ();
213222 }
214223
215224 pub fn clearAbort (self : * Self ) void {
216- self .getWasmerBackend ().clearAbort ();
225+ self .getBackend ().clearAbort ();
217226 }
218227
219- fn getWasmerBackend (self : * Self ) * wasmer.WasmerBackend {
228+ fn getBackend (self : * Self ) * BackendImpl {
220229 return @ptrCast (@alignCast (self .policy .module .backend_ptr ));
221230 }
222231};
@@ -285,14 +294,13 @@ pub const InstancePool = struct {
285294};
286295
287296const testing = std .testing ;
288- const WasmerBackend = @import ("backends/wasmer.zig" ).WasmerBackend ;
289297
290298test "instantiate OPA policy module" {
291299 const wasm_bytes = @embedFile ("test_example_wasm" );
292- var wasmer_backend = try WasmerBackend .init (testing .allocator );
293- defer wasmer_backend .deinit ();
300+ var wasm_backend = try BackendImpl .init (testing .allocator );
301+ defer wasm_backend .deinit ();
294302
295- var b = wasmer_backend .asBackend ();
303+ var b = wasm_backend .asBackend ();
296304 var policy = try Policy .load (testing .allocator , & b , wasm_bytes );
297305 defer policy .deinit ();
298306
@@ -304,10 +312,10 @@ test "instantiate OPA policy module" {
304312
305313test "evaluate policy - admin allowed" {
306314 const wasm_bytes = @embedFile ("test_example_wasm" );
307- var wasmer_backend = try WasmerBackend .init (testing .allocator );
308- defer wasmer_backend .deinit ();
315+ var wasm_backend = try BackendImpl .init (testing .allocator );
316+ defer wasm_backend .deinit ();
309317
310- var b = wasmer_backend .asBackend ();
318+ var b = wasm_backend .asBackend ();
311319 var policy = try Policy .load (testing .allocator , & b , wasm_bytes );
312320 defer policy .deinit ();
313321
@@ -322,10 +330,10 @@ test "evaluate policy - admin allowed" {
322330
323331test "evaluate policy - guest denied" {
324332 const wasm_bytes = @embedFile ("test_example_wasm" );
325- var wasmer_backend = try WasmerBackend .init (testing .allocator );
326- defer wasmer_backend .deinit ();
333+ var wasm_backend = try BackendImpl .init (testing .allocator );
334+ defer wasm_backend .deinit ();
327335
328- var b = wasmer_backend .asBackend ();
336+ var b = wasm_backend .asBackend ();
329337 var policy = try Policy .load (testing .allocator , & b , wasm_bytes );
330338 defer policy .deinit ();
331339
@@ -340,10 +348,10 @@ test "evaluate policy - guest denied" {
340348
341349test "policy with builtins - sprintf" {
342350 const wasm_bytes = @embedFile ("test_builtin_wasm" );
343- var wasmer_backend = try WasmerBackend .init (testing .allocator );
344- defer wasmer_backend .deinit ();
351+ var wasm_backend = try BackendImpl .init (testing .allocator );
352+ defer wasm_backend .deinit ();
345353
346- var b = wasmer_backend .asBackend ();
354+ var b = wasm_backend .asBackend ();
347355 var policy = try Policy .load (testing .allocator , & b , wasm_bytes );
348356 defer policy .deinit ();
349357
@@ -367,10 +375,10 @@ test "policy with builtins - sprintf" {
367375
368376test "instance pool acquire and release" {
369377 const wasm_bytes = @embedFile ("test_example_wasm" );
370- var wasmer_backend = try WasmerBackend .init (testing .allocator );
371- defer wasmer_backend .deinit ();
378+ var wasm_backend = try BackendImpl .init (testing .allocator );
379+ defer wasm_backend .deinit ();
372380
373- var b = wasmer_backend .asBackend ();
381+ var b = wasm_backend .asBackend ();
374382 var policy = try Policy .load (testing .allocator , & b , wasm_bytes );
375383 defer policy .deinit ();
376384
@@ -393,10 +401,10 @@ test "instance pool acquire and release" {
393401// Regression test: OpaContext must have builtins and WASM functions connected for custom builtins to work.
394402test "builtins are connected to backend context" {
395403 const wasm_bytes = @embedFile ("test_builtin_wasm" );
396- var wasmer_backend = try WasmerBackend .init (testing .allocator );
397- defer wasmer_backend .deinit ();
404+ var wasm_backend = try BackendImpl .init (testing .allocator );
405+ defer wasm_backend .deinit ();
398406
399- var b = wasmer_backend .asBackend ();
407+ var b = wasm_backend .asBackend ();
400408 var policy = try Policy .load (testing .allocator , & b , wasm_bytes );
401409 defer policy .deinit ();
402410
@@ -411,8 +419,8 @@ test "builtins are connected to backend context" {
411419 try testing .expect (res .len > 0 );
412420 } else | _ | {}
413421
414- try testing .expect (wasmer_backend .opa_context .builtins != null );
415- try testing .expect (wasmer_backend .opa_context .json_dump_fn != null );
416- try testing .expect (wasmer_backend .opa_context .json_parse_fn != null );
417- try testing .expect (wasmer_backend .opa_context .malloc_fn != null );
422+ try testing .expect (wasm_backend .opa_context .builtins != null );
423+ try testing .expect (wasm_backend .opa_context .json_dump_fn != null );
424+ try testing .expect (wasm_backend .opa_context .json_parse_fn != null );
425+ try testing .expect (wasm_backend .opa_context .malloc_fn != null );
418426}
0 commit comments