diff options
author | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2025-08-14 17:50:42 +0200 |
---|---|---|
committer | Matthias Andreas Benkard <code@mail.matthias.benkard.de> | 2025-08-14 17:53:53 +0200 |
commit | 4dd206a5a3a32e23e05c0842ce4db7a108de4d5f (patch) | |
tree | b83fb3daf371ed53739cefcde1db841df21ca5e4 /src/cmd/lib | |
parent | 35a3b9ccfeb9dcd2c88c359108305b7f750622d6 (diff) |
Refactor shared eval function parameters into a CommandContext struct.
Diffstat (limited to 'src/cmd/lib')
-rw-r--r-- | src/cmd/lib/types.zig | 31 |
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), + }; + } +}; |