diff options
Diffstat (limited to 'src/index.zig')
| -rw-r--r-- | src/index.zig | 44 |
1 files changed, 40 insertions, 4 deletions
diff --git a/src/index.zig b/src/index.zig index 0914176..e85470c 100644 --- a/src/index.zig +++ b/src/index.zig | |||
| @@ -113,7 +113,7 @@ pub fn Param(comptime Id: type) type { | |||
| 113 | /// -s, --long=value_text help_text | 113 | /// -s, --long=value_text help_text |
| 114 | /// -s, help_text | 114 | /// -s, help_text |
| 115 | /// --long help_text | 115 | /// --long help_text |
| 116 | pub fn helpEx( | 116 | pub fn helpFull( |
| 117 | stream: var, | 117 | stream: var, |
| 118 | comptime Id: type, | 118 | comptime Id: type, |
| 119 | params: []const Param(Id), | 119 | params: []const Param(Id), |
| @@ -173,17 +173,53 @@ fn printParam( | |||
| 173 | try stream.print("={}", value_text(context, param)); | 173 | try stream.print("={}", value_text(context, param)); |
| 174 | } | 174 | } |
| 175 | 175 | ||
| 176 | /// A wrapper around helpFull for simple help_text and value_text functions that | ||
| 177 | /// cant return an error or take a context. | ||
| 178 | pub fn helpEx( | ||
| 179 | stream: var, | ||
| 180 | comptime Id: type, | ||
| 181 | params: []const Param(Id), | ||
| 182 | help_text: fn(Param(Id)) []const u8, | ||
| 183 | value_text: fn(Param(Id)) []const u8, | ||
| 184 | ) !void { | ||
| 185 | const Context = struct { | ||
| 186 | help_text: fn(Param(Id)) []const u8, | ||
| 187 | value_text: fn(Param(Id)) []const u8, | ||
| 188 | |||
| 189 | pub fn help(c: @This(), p: Param(Id)) error{}![]const u8 { | ||
| 190 | return c.help_text(p); | ||
| 191 | } | ||
| 192 | |||
| 193 | pub fn value(c: @This(), p: Param(Id)) error{}![]const u8 { | ||
| 194 | return c.value_text(p); | ||
| 195 | } | ||
| 196 | }; | ||
| 197 | |||
| 198 | return helpFull( | ||
| 199 | stream, | ||
| 200 | Id, | ||
| 201 | params, | ||
| 202 | error{}, | ||
| 203 | Context{ | ||
| 204 | .help_text = help_text, | ||
| 205 | .value_text = value_text, | ||
| 206 | }, | ||
| 207 | Context.help, | ||
| 208 | Context.value, | ||
| 209 | ); | ||
| 210 | } | ||
| 211 | |||
| 176 | /// A wrapper around helpEx that takes a Param([]const u8) and uses the string id | 212 | /// A wrapper around helpEx that takes a Param([]const u8) and uses the string id |
| 177 | /// as the help text for each paramter. | 213 | /// as the help text for each paramter. |
| 178 | pub fn help(stream: var, params: []const Param([]const u8)) !void { | 214 | pub fn help(stream: var, params: []const Param([]const u8)) !void { |
| 179 | try helpEx(stream, []const u8, params, error{}, {}, getHelpSimple, getValueSimple); | 215 | try helpEx(stream, []const u8, params, getHelpSimple, getValueSimple); |
| 180 | } | 216 | } |
| 181 | 217 | ||
| 182 | fn getHelpSimple(context: void, param: Param([]const u8)) error{}![]const u8 { | 218 | fn getHelpSimple(param: Param([]const u8)) []const u8 { |
| 183 | return param.id; | 219 | return param.id; |
| 184 | } | 220 | } |
| 185 | 221 | ||
| 186 | fn getValueSimple(context: void, param: Param([]const u8)) error{}![]const u8 { | 222 | fn getValueSimple(param: Param([]const u8)) []const u8 { |
| 187 | return "VALUE"; | 223 | return "VALUE"; |
| 188 | } | 224 | } |
| 189 | 225 | ||