- core/command_mixins.sh: mixin infrastructure with auto-loader - core/mixins/json_output.mixin.sh: --json flag mixin - core/mixins/no_color.mixin.sh: --no-color flag mixin - commands/mixins/MIXIN_TEMPLATE.mixin.sh: template for new mixins - command::run: reset mixin state, preprocess flags before dispatch - command::_preprocess_flags: nameref-based flag stripping, empty array fix - command::mixin: opt-in registration from on_load - list --json: structured JSON output with envelope - inspect --json: structured JSON peer detail output - json::envelope, json::error_envelope helpers
34 lines
No EOL
1 KiB
Bash
34 lines
No EOL
1 KiB
Bash
#!/usr/bin/env bash
|
|
# commands/mixins/<name>.mixin.sh
|
|
# Template for creating a new mixin
|
|
#
|
|
# 1. Copy this file to core/mixins/ (framework) or commands/mixins/ (wgctl-specific)
|
|
# 2. Replace <name> with your mixin name (e.g. peer_filter, time_filter)
|
|
# 3. Replace <FLAG> with your flag (e.g. --name, --since)
|
|
# 4. Add state variable and accessor function
|
|
# 5. In on_load: command::mixin <name>
|
|
|
|
# State variable
|
|
_COMMAND_<NAME>=false # or "" for string values
|
|
|
|
# Called when command::mixin <name> is used in on_load
|
|
function command::mixin::<name>::register() {
|
|
flag::register --<flag>
|
|
# Add more flag::register calls if needed
|
|
}
|
|
|
|
# Called before each command invocation to reset state
|
|
function command::mixin::<name>::reset() {
|
|
_COMMAND_<NAME>=false
|
|
}
|
|
|
|
# Called for each arg — return 0 if consumed, 1 if not
|
|
function command::mixin::<name>::process() {
|
|
case "$1" in
|
|
--<flag>) _COMMAND_<NAME>=true; return 0 ;;
|
|
esac
|
|
return 1
|
|
}
|
|
|
|
# Public accessor — used by commands
|
|
function command::<name>() { [[ "${_COMMAND_<NAME>:-false}" == "true" ]]; } |