78 lines
2.8 KiB
Markdown
78 lines
2.8 KiB
Markdown
# Flags Package
|
|
|
|
## Overview
|
|
|
|
The `pkg/flags` package provides utilities for registering, handling, and transferring command-line flags. It serves as the bridge between the command-line interface and the configuration options.
|
|
|
|
## File Structure
|
|
|
|
```
|
|
pkg/flags/
|
|
├── README.md # This documentation file
|
|
├── registry.go # Core interface and generic implementation
|
|
├── registry_mock.go # Mock implementation for testing
|
|
├── registry_diff.go # Diff-specific registry
|
|
├── registry_apply.go # Apply-specific registry
|
|
├── registry_sync.go # Sync-specific registry
|
|
├── registry_template.go # Template-specific registry
|
|
├── registry_lint.go # Lint-specific registry
|
|
├── registry_destroy.go # Destroy-specific registry
|
|
├── registry_fetch.go # Fetch-specific registry
|
|
├── registry_list.go # List-specific registry
|
|
├── registry_status.go # Status-specific registry
|
|
├── registry_test.go # Tests for registry implementation
|
|
├── flag_handler.go # FlagHandler interface
|
|
├── flag_handler_mock.go # Mock implementation of FlagHandler
|
|
├── flag_handler_test.go # Tests for flag handler implementations
|
|
├── flag_value.go # Generic flag value retrieval functions
|
|
└── flag_value_test.go # Tests for flag value functions
|
|
```
|
|
|
|
## Components
|
|
|
|
- **FlagHandler Interface**: Defines how components handle flag values with boolean return for success
|
|
- **FlagRegistry**: Manages flag registration and transfer
|
|
- **Command-specific Registries**: Specialized registries for each command
|
|
- **Helper Functions**: Utilities for getting flag values of different types
|
|
|
|
## Key Features
|
|
|
|
- **Type Safety**: Helper functions for safely retrieving typed flag values
|
|
- **Flag Registration**: Centralized registration of flags to command objects
|
|
- **Flag Transfer**: Mechanism to transfer flag values to option objects
|
|
- **Flag Existence Checking**: Methods to check if flags are registered or handled
|
|
- **Success Indication**: Boolean return values to indicate if flags were successfully handled
|
|
|
|
## Usage
|
|
|
|
```go
|
|
// Create a registry
|
|
registry := flags.NewGenericFlagRegistry()
|
|
|
|
// Register flags to a command
|
|
registry.RegisterFlags(cmd)
|
|
|
|
// Transfer flags to options
|
|
registry.TransferFlags(cmd, opts)
|
|
|
|
// Check if a flag is registered
|
|
if registry.IsFlagRegistered("my-flag") {
|
|
// Do something
|
|
}
|
|
|
|
// Handle a flag with success indication
|
|
handled := opts.HandleFlag("flag-name", value, changed)
|
|
if !handled {
|
|
// Flag wasn't recognized
|
|
}
|
|
```
|
|
|
|
## Testing
|
|
|
|
The package includes mock implementations for testing:
|
|
|
|
- `MockFlagHandler`: For testing flag handling logic
|
|
- `MockFlagRegistry`: For testing flag registration and transfer
|
|
|
|
These mocks can be used to verify flag handling behavior without needing real command objects.
|