summaryrefslogtreecommitdiff
path: root/src/cmd/lib
diff options
context:
space:
mode:
authorMatthias Andreas Benkard <code@mail.matthias.benkard.de>2025-08-14 17:50:42 +0200
committerMatthias Andreas Benkard <code@mail.matthias.benkard.de>2025-08-14 17:53:53 +0200
commit4dd206a5a3a32e23e05c0842ce4db7a108de4d5f (patch)
treeb83fb3daf371ed53739cefcde1db841df21ca5e4 /src/cmd/lib
parent35a3b9ccfeb9dcd2c88c359108305b7f750622d6 (diff)
Refactor shared eval function parameters into a CommandContext struct.
Diffstat (limited to 'src/cmd/lib')
-rw-r--r--src/cmd/lib/types.zig31
1 files changed, 31 insertions, 0 deletions
diff --git a/src/cmd/lib/types.zig b/src/cmd/lib/types.zig
index 1f0e162..2d96295 100644
--- a/src/cmd/lib/types.zig
+++ b/src/cmd/lib/types.zig
@@ -61,3 +61,34 @@ pub const InputSource = struct {
}
}
};
+
+pub const CommandContext = struct {
+ allocator: Allocator,
+ output_capture: ?*OutputCapture,
+ input_source: ?*InputSource,
+
+ // The real type is:
+ //
+ // const ExecuteCommandFn = *const fn (Command, Allocator, ?*OutputCapture, ?*InputSource) anyerror!CommandStatus;
+ //
+ // But Command is defined in ../cmd.zig, so we can't write it.
+ execute_command: ?*const anyopaque, // Will be cast to the appropriate function type when used
+
+ pub fn init(allocator: Allocator, output_capture: ?*OutputCapture, input_source: ?*InputSource) CommandContext {
+ return CommandContext{
+ .allocator = allocator,
+ .output_capture = output_capture,
+ .input_source = input_source,
+ .execute_command = null,
+ };
+ }
+
+ pub fn with_executor(allocator: Allocator, output_capture: ?*OutputCapture, input_source: ?*InputSource, execute_command: anytype) CommandContext {
+ return CommandContext{
+ .allocator = allocator,
+ .output_capture = output_capture,
+ .input_source = input_source,
+ .execute_command = @ptrCast(&execute_command),
+ };
+ }
+};