Files
golib/cobra/interface.go
nabbar 942068222c 2025-11 Improvement, Tests, Documentations, Bug Fix, Optimization
Global Repos / Workflow
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- UPDATE workflow: split old workflow into multiple files
- UPDATE .gitignore: added cluster.old.tar.gz and build artifacts
- UPDATE .golangci.yml: enhanced linter rules and disabled deprecated linters

[archive]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- FIX extract: recursive decompression for nested archives (e.g., .tar.gz handling)
- FIX extract: ZIP archive support now properly uses ReaderAt interface with seek reset
- ADD extract: proper symlink and hard link handling in archives
- UPDATE tar/writer: improved error handling and file mode preservation
- UPDATE zip/writer: enhanced validation and error messages
- UPDATE compress/interface: added support for additional compression formats
- UPDATE helper/compressor: fixed typo in error handling

[artifact]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE artifact: improved error handling and context management
- UPDATE client/interface: enhanced API with better type safety and context propagation
- UPDATE client/model: refactored for better maintainability
- UPDATE github: removed unused error codes, improved model validation
- UPDATE gitlab: enhanced API pagination and error handling
- UPDATE jfrog: improved artifactory API compatibility
- UPDATE s3aws: enhanced S3 bucket operations and error messages

[atomic]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE cast: improved type conversion with better error handling
- UPDATE interface: enhanced atomic operations with generics support
- UPDATE synmap: fixed race conditions in concurrent access patterns
- UPDATE value: improved atomic value operations with better memory ordering

[aws]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE bucket: enhanced ACL and CORS configuration with validation
- UPDATE configAws/models: improved credential handling and region configuration
- UPDATE configCustom/interface: added support for custom endpoints
- UPDATE http/request: improved retry logic and timeout handling
- UPDATE interface: enhanced AWS client with context propagation
- UPDATE model: refactored for AWS SDK v2 compatibility
- UPDATE multipart/interface: improved chunk handling for large uploads
- UPDATE pusher: optimized hash calculation and upload progress tracking
- UPDATE resolver: enhanced endpoint resolution with custom DNS
- DELETE test files: removed bucket_test.go, group_test.go, object_test.go, policy_test.go, role_test.go, user_test.go

[cache]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- ADD context: context-aware cache lifecycle management
- UPDATE interface: complete rewrite with Go generics for type-safe key-value operations
- ADD item package: generic cache item with expiration tracking (interface and model)
- UPDATE model: refactored to use generics (Cache[K comparable, V any])
- REFACTOR: split item.go into modelAny.go for better code organization

[certificates]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE auth/encode: improved PEM encoding with better error messages
- UPDATE auth/interface: enhanced authentication certificate handling
- UPDATE ca: improved CA certificate generation and validation
- UPDATE certs: enhanced certificate configuration with SAN support
- UPDATE cipher: improved cipher suite selection and validation
- UPDATE curves: enhanced elliptic curve handling with additional curves
- ADD deprecated.go: marked deprecated TLS versions and cipher suites
- UPDATE interface: enhanced certificate interface with context support
- UPDATE model: improved certificate model with better validation
- UPDATE rootca: enhanced root CA pool management
- UPDATE tlsversion: added TLS 1.3 support with proper validation
- UPDATE tools: improved certificate utility functions

[cobra]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE completion: improved shell completion generation (bash, zsh, fish, powershell)
- UPDATE configure: enhanced configuration file handling
- UPDATE printError: improved error formatting with color support
- UPDATE interface: enhanced cobra interface with context support
- UPDATE model: improved cobra model with better validation

[config]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE components: improved component lifecycle management
- UPDATE const/const: improved constant definitions
- UPDATE context: enhanced context handling with better propagation
- UPDATE errors: improved error definitions
- UPDATE events: enhanced event management
- UPDATE manage: improved configuration management with validation
- UPDATE model: refactored config model
- UPDATE shell: enhanced shell integration for interactive configuration
- UPDATE types: improved component and componentList types

[console]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- ADD buff.go: BuffPrintf function for colored output to io.Writer (moved from ioutils/multiplexer)
- DELETE color.go: removed legacy color file (consolidated functionality)
- UPDATE error: improved error definitions with better messages
- ADD interface: console interface for abstraction
- ADD model: console model for state management
- UPDATE padding: enhanced string padding with Unicode support
- UPDATE prompt: improved interactive prompt handling

[context]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- DELETE config.go: removed deprecated configuration (replaced by Config[T] interface)
- UPDATE context: improved context handling with better cancellation support
- UPDATE gin/interface: enhanced Gin context integration with type safety
- ADD helper: context helper functions for common operations
- ADD interface: generic Config[T comparable] interface for type-safe context storage
- ADD map: MapManage[T] interface for concurrent-safe map operations
- ADD model: thread-safe context model implementation with sync.Map

[database]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE gorm/config: improved database configuration
- UPDATE gorm/driver: enhanced database driver with better connection pooling
- UPDATE gorm/driver_darwin: macOS-specific database optimizations
- UPDATE gorm/interface: improved GORM interface with context support
- UPDATE gorm/model: refactored model for better maintainability
- UPDATE gorm/monitor: enhanced monitoring for database connections
- UPDATE kvtypes: improved types for key-value store (compare, driver, item, table)

[duration]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE big: enhanced big.Duration for large time spans with arithmetic operations
- UPDATE encode: improved marshaling for JSON, YAML, TOML, Text, CBOR
- UPDATE format: enhanced human-readable formatting (ns, μs, ms, s, m, h, d, w)
- UPDATE interface: improved duration interface with arithmetic methods
- UPDATE model: refactored Duration type
- UPDATE operation: enhanced arithmetic operations (Add, Sub, Mul, Div)
- UPDATE parse: improved parsing with multiple format support
- UPDATE truncate: enhanced truncation for rounding durations

[encoding]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE aes: improved AES encryption with reader/writer interfaces
- UPDATE hexa: enhanced hexadecimal encoding with better error handling
- UPDATE mux: improved multiplexer/demultiplexer for stream handling
- UPDATE randRead: enhanced random data generation
- UPDATE sha256 package: SHA-256 hashing with reader/writer interfaces

[errors]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- ADD pool package: thread-safe error pool for collecting multiple errors with concurrent access
- UPDATE code: improved error code definition and lookup
- UPDATE errors: enhanced error creation with better stack trace
- UPDATE interface: improved error interface with more methods
- UPDATE mode: enhanced error mode handling (production vs development)
- UPDATE return: improved error return handling with context
- UPDATE trace: enhanced error tracing with file and line information

[file]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE bandwidth: improved bandwidth tracking with concurrency tests
- UPDATE perm: enhanced file permission handling with Unix/Windows support
- UPDATE perm/encode: improved marshaling for JSON, YAML, TOML
- UPDATE perm/format: enhanced permission formatting (e.g., "rwxr-xr-x")
- UPDATE perm/parse: improved parsing of permission strings and octal values
- UPDATE progress: enhanced progress tracking for file I/O operations
- UPDATE progress/io*: improved reader, writer, seeker, closer interfaces with progress callbacks

[ftpclient]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE config: improved FTP configuration with TLS support
- UPDATE errors: enhanced error definitions
- UPDATE interface: improved FTP client interface
- UPDATE model: refactored FTP client model

[httpcli]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE cli: improved HTTP client with retry logic and timeout handling
- UPDATE dns-mapper: enhanced DNS mapping for custom resolution
- UPDATE dns-mapper/config: improved DNS mapper configuration
- UPDATE dns-mapper/errors: enhanced error handling
- UPDATE dns-mapper/interface: improved DNS mapper interface
- UPDATE dns-mapper/transport: enhanced HTTP transport with DNS override
- UPDATE errors: improved error definitions
- UPDATE options: enhanced client options with context support

[httpserver]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE config: improved server configuration with TLS and middleware support
- UPDATE handler: enhanced request handler with better error handling
- UPDATE interface: improved server interface with context support and monitoring integration
- UPDATE model: refactored server model with better validation
- UPDATE monitor: enhanced monitoring integration with status tracking
- UPDATE pool: improved server pool management (config, interface, list, model)
- UPDATE run: enhanced server runtime with graceful shutdown
- UPDATE server: improved core server implementation with better lifecycle
- ADD testhelpers/certs.go: certificate generation utilities for testing
- UPDATE types: improved const, fields, and handler types

[ioutils]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE bufferReadCloser: improved buffered reader/writer with closer
- UPDATE fileDescriptor: enhanced file descriptor limit management (platform-specific for Linux/macOS/Windows)
- UPDATE ioprogress: improved progress tracking for I/O operations
- UPDATE iowrapper: enhanced I/O wrapper with custom interfaces
- UPDATE mapCloser: improved map of closers for resource management
- UPDATE maxstdio: enhanced C implementation for max stdio file descriptor retrieval
- DELETE multiplexer/model.go: removed legacy multiplexer (functionality moved to console/buff.go and retro/)
- UPDATE nopwritecloser: improved no-op write closer
- UPDATE tools: enhanced I/O utility functions

[ldap]
- UPDATE ldap: improved LDAP client with better connection handling and search operations

[logger]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE config: improved default values, file options, and syslog configuration
- UPDATE entry/interface: enhanced log entry with context support
- UPDATE fields: improved field handling with JSON cloning
- UPDATE gorm/interface: enhanced GORM logger with trace ID support
- UPDATE hashicorp/interface: improved HashiCorp logger integration
- FIX hookfile/system: use os.OpenRoot for secure file operations (prevents path traversal)
- FIX hookfile/system: fixed import path from libsrv "golib/server" to "golib/runner"
- ADD hookfile: IsRunning() method to track file hook state
- UPDATE hookstderr/interface: enhanced stderr hook with better buffering
- UPDATE hookstdout/interface: enhanced stdout hook with better buffering
- UPDATE hooksyslog: improved syslog integration with channel and priority handling
- ADD hookwriter package: generic io.Writer hook for custom output destinations
- UPDATE interface: enhanced logger interface with context propagation
- UPDATE level: improved log level handling and comparison
- UPDATE log: enhanced logging with better formatting
- UPDATE manage: improved logger lifecycle management
- UPDATE model: refactored logger model for better maintainability

[mail]
- UPDATE sender: improved mail sender with better MIME handling
- UPDATE interface: enhanced interface with monitoring support
- UPDATE monitor: added monitoring integration for mail operations

[monitor]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- ADD status package: new subpackage for status management with Status type (KO, Warn, OK)
- ADD status/encode: marshaling support for JSON, YAML, TOML, Text, CBOR
- ADD status/format: human-readable status formatting
- ADD status/interface: Status type with Parse and String methods
- UPDATE encode: improved encoding with better error handling
- UPDATE error: enhanced error definitions
- UPDATE info: improved system info collection (CPU, mem, disk, network)
- UPDATE interface: enhanced monitor interface with status support and better component integration
- UPDATE metrics: improved metrics collection and export
- UPDATE middleware: enhanced monitoring middleware for HTTP
- UPDATE pool/interface: enhanced pool interface with better monitoring integration
- UPDATE pool/metrics: improved metrics collection in pool
- UPDATE pool/model: refactored pool model for better maintainability
- UPDATE pool/pool: enhanced pool implementation with better lifecycle
- UPDATE server: enhanced server monitoring with status tracking
- UPDATE types/monitor: improved monitor type definitions

[nats]
- UPDATE client: improved NATS client with better subscription handling
- UPDATE config: enhanced NATS configuration with cluster support
- UPDATE monitor: added monitoring integration for NATS operations
- UPDATE server: improved NATS server integration with monitoring

[network]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE bytes: improved byte size handling for network operations
- UPDATE number: enhanced number utilities for network data
- UPDATE protocol/encode: improved protocol encoding
- ADD protocol/format: protocol formatting utilities
- UPDATE protocol/interface: enhanced protocol interface
- UPDATE protocol/model: refactored protocol model

[password]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE password: improved password utilities with strength validation and secure generation

[pidcontroller]
- UPDATE interface: improved PID controller interface
- UPDATE model: enhanced PID controller model with better tuning parameters

[pprof]
- UPDATE tools: improved pprof utilities for profiling integration

[prometheus]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE bloom/bloom: improved bloom filter with better concurrency handling
- UPDATE bloom/collection: enhanced bloom filter collection operations
- UPDATE interface: enhanced prometheus interface with better type safety
- UPDATE metrics/interface: enhanced metrics interface with better registration
- UPDATE metrics/model: refactored metrics model for better maintainability
- UPDATE model: refactored prometheus model with better validation
- UPDATE pool: enhanced metric pool with concurrent access
- UPDATE pool/interface: enhanced pool interface
- UPDATE pool/model: refactored pool model
- UPDATE route: improved routing for metric endpoints
- UPDATE types: enhanced type definitions for metrics
- UPDATE webmetrics: improved existing metrics (requestBody, requestIPTotal, requestLatency, requestSlow, requestTotal, requestURITotal, responseBody)
- ADD webmetrics/activeConnections: gauge for tracking concurrent HTTP connections
- ADD webmetrics/requestErrors: counter for HTTP request errors
- ADD webmetrics/responseSizeByEndpoint: histogram for response size distribution by endpoint
- ADD webmetrics/statusCodeTotal: counter for HTTP status codes

[request]
- UPDATE interface: enhanced request interface with better type safety
- UPDATE model: refactored request model for better maintainability
- UPDATE options: improved request options with better validation
- UPDATE url: enhanced URL handling with better parsing

[retro]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE encoding: improved encoding utilities with better format support
- UPDATE format: enhanced formatting functions for retro compatibility
- UPDATE model: refactored retro model with better validation
- UPDATE utils: improved utility functions for version handling
- UPDATE version: enhanced version utilities for retro compatibility

[router]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE auth/interface: enhanced authentication interface with better validation
- UPDATE auth/model: improved authentication model
- UPDATE authheader/interface: enhanced authentication header interface
- UPDATE default: improved default router configuration
- UPDATE error: enhanced error definitions for router
- UPDATE header/config: improved header configuration
- UPDATE header/interface: enhanced header interface
- UPDATE header/model: refactored header model
- UPDATE interface: improved router interface with better type safety
- UPDATE middleware: improved router middleware with better error handling
- UPDATE model: refactored router model for better maintainability
- UPDATE router: enhanced core router implementation
- UPDATE tools: enhanced router utilities for route registration

[runner]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE package: move package for lifecycle management of long-running services (moved from server/runner)
- ADD interface: Runner interface with Start, Stop, Restart, IsRunning, and Uptime methods
- ADD startStop package: service lifecycle with blocking start and graceful stop (interface, model, comprehensive tests)
- ADD ticker package: periodic task execution at regular intervals (interface, model, comprehensive tests)
- ADD tests: concurrency, construction, errors, lifecycle, and uptime tests for both startStop and ticker
- ADD tools: RecoveryCaller for panic recovery in goroutines

[semaphore]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- FIX bar/bar: Dec method now properly decrements (was calling Inc64, now calls Dec64 with negative value)
- UPDATE bar: improved progress bar with better MPB integration
- UPDATE bar/context: enhanced context handling for cancellation
- UPDATE bar/interface: added methods for Total() and better progress tracking
- UPDATE bar/model: improved model with atomic operations
- UPDATE bar tests: enhanced bar_operations_test, edge_cases_test, integration_test, and semaphore_test
- UPDATE context: enhanced context propagation
- UPDATE interface: improved semaphore interface with weighted operations
- UPDATE model: refactored model for better thread safety
- UPDATE progress: enhanced progress tracking with multiple bars
- UPDATE sem/interface: added IsRunning() method for state tracking
- UPDATE sem/ulimit: improved ulimit handling for file descriptors
- UPDATE sem/weighted: enhanced weighted semaphore operations
- UPDATE types: improved type definitions for bar, progress, and semaphore

[server]
- REFACTOR: moved runner subpackage to root-level runner package
- DELETE: empty package after moved runner subpackage

[shell]
- UPDATE goprompt: improved interactive prompt handling with better input validation

[size]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- ADD arithmetic.go: NEW file with arithmetic operations (Add, Sub, Mul, Div with overflow detection)
- UPDATE encode: improved marshaling for JSON, YAML, TOML, Text, CBOR
- UPDATE format: enhanced human-readable formatting (B, KB, MB, GB, TB, PB, EB)
- UPDATE interface: added arithmetic methods (Mul, MulErr, Div, DivErr, Add, AddErr, Sub, SubErr)
- UPDATE model: refactored Size type with better validation
- UPDATE parse: improved parsing with unit detection (IEC and SI standards)

[smtp]
- UPDATE client: improved SMTP client with better error handling
- UPDATE config: enhanced configuration with validation
- UPDATE config/error: improved error definitions
- UPDATE config/interface: enhanced interface with context support
- UPDATE config/model: refactored model for better maintainability
- UPDATE interface: improved SMTP interface with monitoring support
- UPDATE monitor: added monitoring integration for SMTP operations
- DELETE network/network.go: removed legacy network handling (consolidated into client)
- UPDATE tlsmode/tls: enhanced TLS mode handling (None, TLS, StartTLS)
- UPDATE types/interface: improved type interface

[socket]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- ADD client/interface_darwin: macOS-specific socket client options
- UPDATE client/interface_linux: platform-specific socket options for Linux
- UPDATE client/interface_other: platform-specific socket options for other platforms
- UPDATE client/tcp/error: improved TCP client error handling
- UPDATE client/tcp/interface: enhanced TCP client interface
- UPDATE client/tcp/model: improved TCP client model
- UPDATE client/udp/error: improved UDP client error handling
- UPDATE client/udp/interface: enhanced UDP client interface
- UPDATE client/udp/model: improved UDP client model
- UPDATE client/unix/error: improved Unix socket client error handling
- UPDATE client/unix/ignore: enhanced ignore functionality
- UPDATE client/unix/interface: enhanced Unix socket client interface
- UPDATE client/unix/model: improved Unix socket client model
- UPDATE client/unixgram/error: improved Unix datagram client error handling
- UPDATE client/unixgram/ignore: enhanced ignore functionality
- UPDATE client/unixgram/interface: enhanced Unix datagram client interface
- UPDATE client/unixgram/model: improved Unix datagram client model
- UPDATE config/client: improved client configuration
- UPDATE config/server: improved server configuration
- DELETE delim: moved legacy delimiter to I/O package
- UPDATE interface: improved socket interface
- UPDATE io: enhanced I/O operations
- DELETE multi: moved legacy multi to I/O package
- ADD server/interface_darwin: macOS-specific socket server options
- UPDATE server/interface_linux: platform-specific server options for Linux
- UPDATE server/interface_other: platform-specific server options for other platforms
- UPDATE server/tcp/error: improved TCP server error handling
- UPDATE server/tcp/interface: enhanced TCP server interface
- UPDATE server/tcp/listener: improved TCP server listener
- UPDATE server/tcp/model: improved TCP server model
- UPDATE server/udp/error: improved UDP server error handling
- UPDATE server/udp/interface: enhanced UDP server interface
- UPDATE server/udp/listener: improved UDP server listener
- UPDATE server/udp/model: improved UDP server model
- UPDATE server/unix/error: improved Unix socket server error handling
- UPDATE server/unix/ignore: enhanced ignore functionality
- UPDATE server/unix/interface: enhanced Unix socket server interface
- UPDATE server/unix/listener: improved Unix socket server listener
- UPDATE server/unix/model: improved Unix socket server model
- UPDATE server/unixgram/error: improved Unix datagram server error handling
- UPDATE server/unixgram/ignore: enhanced ignore functionality
- UPDATE server/unixgram/interface: enhanced Unix datagram server interface
- UPDATE server/unixgram/listener: improved Unix datagram server listener
- UPDATE server/unixgram/model: improved Unix datagram server model

[static]
- UPDATE interface: improved static interface with monitoring support
- UPDATE model: refactored static model
- UPDATE monitor: added monitoring integration for static file operations

[status]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE cache: improved status cache with better synchronization
- UPDATE config: improved status configuration
- UPDATE control/encode: improved control encoding
- UPDATE control/interface: enhanced control interface with status tracking
- UPDATE control/model: refactored control model
- UPDATE encode: improved status encoding
- UPDATE error: enhanced error definitions for status
- UPDATE info: improved status info handling
- UPDATE interface: enhanced status interface
- UPDATE listmandatory/interface: improved list mandatory interface
- UPDATE listmandatory/model: refactored list mandatory model
- UPDATE mandatory/interface: enhanced mandatory interface
- UPDATE mandatory/model: refactored mandatory model
- UPDATE model: refactored status model
- UPDATE pool: improved status pool
- UPDATE route: enhanced status route handling

[test]
- DELETE: all manual tests are or will be replaced by proper automated test suites in respective packages

[version]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE error: improved error definitions for version
- UPDATE license: enhanced license handling
- UPDATE version: improved version utilities

[viper]
- ADD/UPDATE documentation: comprehensive documentation with monitoring patterns
- ADD/UPDATE tests: enhanced benchmark, config, encoding, example, integration, lifecycle, metrics, security, transitions
- UPDATE interface: enhanced viper interface with context support
- UPDATE model: refactored viper model for better maintainability
2025-11-15 21:09:32 +01:00

645 lines
27 KiB
Go

/*
* MIT License
*
* Copyright (c) 2022 Nicolas JUHEL
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*
*
*/
// Package cobra provides a comprehensive, production-ready wrapper around spf13/cobra
// for building professional CLI applications in Go.
//
// This package simplifies CLI application development by providing:
// - Zero-boilerplate setup for complete CLI applications
// - Thread-safe, instance-based design (no global state)
// - Type-safe flags for 20+ Go types with compile-time safety
// - Auto-generated shell completion (bash, zsh, fish, PowerShell)
// - Auto-generated configuration file support
// - Integrated logging and version management
//
// Design Philosophy:
//
// 1. Instance-Based Architecture: Unlike raw cobra which often relies on global variables,
// this package uses instance-based design ensuring thread-safety and testability.
//
// 2. Progressive Enhancement: Start with a basic CLI, then add features (completion,
// config generation) with single function calls.
//
// 3. Type Safety: Comprehensive flag support with Go's type system preventing runtime errors.
//
// Quick Example:
//
// package main
//
// import (
// libcbr "github.com/nabbar/golib/cobra"
// libver "github.com/nabbar/golib/version"
// )
//
// func main() {
// app := libcbr.New()
// app.SetVersion(version)
// app.Init()
//
// var config string
// app.SetFlagConfig(true, &config)
// app.AddCommandCompletion()
//
// app.Execute()
// }
//
// Built-in Features:
// - Shell completion generation (--completion bash|zsh|fish|powershell)
// - Configuration file generation (--configure json|yaml|toml)
// - Error code printing (--print-error-code)
// - Version information (--version)
//
// For more examples and detailed documentation, see README.md.
package cobra
import (
"io"
"time"
liblog "github.com/nabbar/golib/logger"
libver "github.com/nabbar/golib/version"
libvpr "github.com/nabbar/golib/viper"
spfcbr "github.com/spf13/cobra"
)
// FuncInit is a function type for initialization callbacks.
// It is called during cobra initialization to perform custom setup operations.
type FuncInit func()
// FuncLogger is a function type that returns a logger instance.
// This pattern allows for lazy initialization of the logger and dependency injection.
type FuncLogger func() liblog.Logger
// FuncViper is a function type that returns a viper configuration instance.
// This pattern allows for lazy initialization and dependency injection of configuration.
type FuncViper func() libvpr.Viper
// FuncPrintErrorCode is a function type for printing error code information.
// It receives an item identifier and its corresponding value for display.
type FuncPrintErrorCode func(item, value string)
// Cobra is the main interface for building CLI applications with enhanced features.
// It wraps spf13/cobra with additional functionality for logging, configuration,
// and version management while maintaining thread-safety through instance-based design.
type Cobra interface {
// SetVersion sets the version of the Cobra application. The version is used
// to construct the help message and the version message.
//
// The SetVersion function does not return any value. It is designed to be used as a
// setter function, which means that the function will not return until the Cobra
// application's logic has been set.
//
// If an error occurs while setting the version, the function will panic.
SetVersion(v libver.Version)
// SetFuncInit sets the initialization function. The initialization function is called
// when the Cobra application is initialized. The initialization function takes
// no arguments and returns no value.
//
// The SetFuncInit function does not return any value. It is designed to be used as a
// setter function, which means that the function will not return until the Cobra
// application's logic has been set.
//
// If an error occurs while setting the initialization function, the error is returned.
//
// The SetFuncInit function is safe to call concurrently.
SetFuncInit(fct FuncInit)
// SetViper sets the viper function. The viper function is called when the Cobra
// application needs to access the viper configuration. The viper function takes
// no arguments and returns a viper configuration.
//
// The SetViper function does not return any value. It is designed to be used as a
// setter function, which means that the function will not return until the Cobra
// application's logic has been set.
//
// If an error occurs while setting the viper, the error is returned.
SetViper(fct FuncViper)
// SetLogger sets the logger function. The logger function is called when the Cobra
// application needs to log information. The logger function takes no arguments and
// returns a logger.
//
// The SetLogger function does not return any value. It is designed to be used as a
// setter function, which means that the function will not return until the Cobra
// application's logic has been set.
//
// If an error occurs while setting the logger, the error is returned.
//
// The SetLogger function is safe to call concurrently.
SetLogger(fct FuncLogger)
// SetForceNoInfo sets the ForceNoInfo flag. If the flag is set to true, the
// Cobra application will not print any information related to the
// package path. If the flag is set to false, the Cobra application will
// print information related to the package path.
//
// The SetForceNoInfo function does not return any value. It is designed to be
// used as a setter function, which means that the function will not return
// until the Cobra application's logic has been set.
SetForceNoInfo(flag bool)
// Init initializes the Cobra application. It sets the logger, the version,
// and the force no info flag. The function must be called before executing
// the Cobra application.
//
// If an error occurs while initializing the Cobra application, the
// error is returned.
//
// The Init function does not return any value. It is designed to be used as
// a setter function, which means that the function will not return until the
// Cobra application's logic has been set.
Init()
// SetFlagConfig adds a string flag to the Cobra application that can be used
// to configure the application.
//
// The SetFlagConfig function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a string
//
// If an error occurs while adding the flag, the error is returned.
SetFlagConfig(persistent bool, flagVar *string) error
// SetFlagVerbose adds a verbose flag to the Cobra application
//
// The SetFlagVerbose function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int
//
// The verbose flag is used to enable verbose mode (multi allowed v, vv, vvv)
//
// Example:
// cobra.SetFlagVerbose(true, &verbose)
SetFlagVerbose(persistent bool, flagVar *int)
// AddFlagString adds a string flag to the Cobra application
//
// The AddFlagString function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a string
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagString(persistent bool, p *string, name, shorthand string, value string, usage string)
// AddFlagCount adds a count flag to the Cobra application
//
// The AddFlagCount function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - usage: a description of the flag
AddFlagCount(persistent bool, p *int, name, shorthand string, usage string)
// AddFlagBool adds a bool flag to the Cobra application
//
// The AddFlagBool function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a bool
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagBool(persistent bool, p *bool, name, shorthand string, value bool, usage string)
// AddFlagDuration adds a time.Duration flag to the Cobra application
//
// The AddFlagDuration function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a time.Duration
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagDuration(persistent bool, p *time.Duration, name, shorthand string, value time.Duration, usage string)
// AddFlagFloat32 adds a float32 flag to the Cobra application
//
// The AddFlagFloat32 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a float32
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagFloat32(persistent bool, p *float32, name, shorthand string, value float32, usage string)
// AddFlagFloat64 adds a float64 flag to the Cobra application
//
// The AddFlagFloat64 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a float64
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagFloat64(persistent bool, p *float64, name, shorthand string, value float64, usage string)
// AddFlagInt adds an int flag to the Cobra application
//
// The AddFlagInt function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagInt(persistent bool, p *int, name, shorthand string, value int, usage string)
// AddFlagInt8 adds an int8 flag to the Cobra application
//
// The AddFlagInt8 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int8
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagInt8(persistent bool, p *int8, name, shorthand string, value int8, usage string)
// AddFlagInt16 adds an int16 flag to the Cobra application
//
// The AddFlagInt16 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int16
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagInt16(persistent bool, p *int16, name, shorthand string, value int16, usage string)
// AddFlagInt32 adds an int32 flag to the Cobra application
//
// The AddFlagInt32 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int32
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagInt32(persistent bool, p *int32, name, shorthand string, value int32, usage string)
// AddFlagInt32Slice adds an int32 slice flag to the Cobra application
//
// The AddFlagInt32Slice function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int32 slice
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagInt32Slice(persistent bool, p *[]int32, name, shorthand string, value []int32, usage string)
// AddFlagInt64 adds an int64 flag to the Cobra application
//
// The AddFlagInt64 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int64
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagInt64(persistent bool, p *int64, name, shorthand string, value int64, usage string)
// AddFlagInt64Slice adds an int64 slice flag to the Cobra application
//
// The AddFlagInt64Slice function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to an int64 slice
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagInt64Slice(persistent bool, p *[]int64, name, shorthand string, value []int64, usage string)
// AddFlagUint adds a uint flag to the Cobra application
//
// The AddFlagUint function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a uint
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagUint(persistent bool, p *uint, name, shorthand string, value uint, usage string)
// AddFlagUintSlice adds a uint slice flag to the Cobra application
//
// The AddFlagUintSlice function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a uint slice
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagUintSlice(persistent bool, p *[]uint, name, shorthand string, value []uint, usage string)
// AddFlagUint8 adds a uint8 flag to the Cobra application
//
// The AddFlagUint8 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a uint8
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagUint8(persistent bool, p *uint8, name, shorthand string, value uint8, usage string)
// AddFlagUint16 adds a uint16 flag to the Cobra application
//
// The AddFlagUint16 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a uint16
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagUint16(persistent bool, p *uint16, name, shorthand string, value uint16, usage string)
// AddFlagUint32 adds a uint32 flag to the Cobra application
//
// The AddFlagUint32 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a uint32
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
//
// The AddFlagUint32 function does not return any value. It is used
// to add a uint32 flag to the Cobra application.
//
// The AddFlagUint32 function allocates memory for the returned
// flag. The caller is responsible for freeing this memory when it is no
// longer needed.
AddFlagUint32(persistent bool, p *uint32, name, shorthand string, value uint32, usage string)
// AddFlagUint64 adds a uint64 flag to the Cobra application
//
// The AddFlagUint64 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a uint64
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
//
// The AddFlagUint64 function does not return any value. It is used
// to add a uint64 flag to the Cobra application.
//
// The AddFlagUint64 function allocates memory for the returned
// flag. The caller is responsible for freeing this memory when it is no
// longer needed.
AddFlagUint64(persistent bool, p *uint64, name, shorthand string, value uint64, usage string)
// AddFlagStringArray adds a string array flag to the Cobra application
//
// The AddFlagStringArray function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a string array
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
//
// The AddFlagStringArray function does not return any value. It is used
// to add a string array flag to the Cobra application.
//
// The AddFlagStringArray function allocates memory for the returned
// flag. The caller is responsible for freeing this memory when it is no
// longer needed.
AddFlagStringArray(persistent bool, p *[]string, name, shorthand string, value []string, usage string)
// AddFlagStringToInt adds a string flag to the Cobra application
// that maps string keys to int values.
//
// The AddFlagStringToInt function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a map of string keys to int values
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
AddFlagStringToInt(persistent bool, p *map[string]int, name, shorthand string, value map[string]int, usage string)
// AddFlagStringToInt64 adds a string flag to the Cobra application
// that maps string keys to int64 values.
//
// The AddFlagStringToInt64 function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a map of string keys to int64 values
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
//
// The AddFlagStringToInt64 function does not return any value. It is used
// to add a string flag to the Cobra application.
//
// The AddFlagStringToInt64 function allocates memory for the returned
// flag. The caller is responsible for freeing this memory when it is no
// longer needed.
AddFlagStringToInt64(persistent bool, p *map[string]int64, name, shorthand string, value map[string]int64, usage string)
// AddFlagStringToString adds a string flag to the Cobra application
// that maps string keys to string values.
//
// The AddFlagStringToString function takes the following arguments:
//
// - persistent: a boolean indicating whether the flag is persistent
// or not
// - p: a pointer to a map of string keys to string values
// - name: the name of the flag
// - shorthand: a shorthand string for the flag
// - value: the default value of the flag
// - usage: a description of the flag
//
// The AddFlagStringToString function does not return any value. It is used
// to add a string flag to the Cobra application.
//
// The AddFlagStringToString function allocates memory for the returned
// flag. The caller is responsible for freeing this memory when it is no
// longer needed.
AddFlagStringToString(persistent bool, p *map[string]string, name, shorthand string, value map[string]string, usage string)
// NewCommand returns a new Cobra command with the given command name,
// short description, long description, usage without command, and
// example usage without command.
//
// The NewCommand function takes the following arguments:
//
// - cmd: the name of the command
// - short: a short description of the command
// - long: a long description of the command
// - useWithoutCmd: the usage string without the command name
// - exampleWithoutCmd: an example usage string without the command name
//
// The NewCommand function returns a pointer to a spfcbr.Command object.
//
// The NewCommand function does not modify the state of the Cobra application.
//
// The NewCommand function allocates memory for the returned Cobra command.
// The caller is responsible for freeing this memory when it is no longer needed.
NewCommand(cmd, short, long, useWithoutCmd, exampleWithoutCmd string) *spfcbr.Command
// AddCommand adds one or more subcommands to the Cobra application.
//
// The AddCommand function takes one or more arguments. Each argument is a
// pointer to a spfcbr.Command object.
//
// The AddCommand function does not return any value. It is used to add
// subcommands to the Cobra application.
AddCommand(subCmd ...*spfcbr.Command)
// AddCommandCompletion adds a subcommand to the Cobra application
// that prints the possible completions for the current command.
//
// The AddCommandCompletion function does not return any value. It is
// used to add a completion subcommand to the Cobra application.
//
// The AddCommandCompletion function takes no arguments.
AddCommandCompletion()
// AddCommandConfigure adds a subcommand to the Cobra application
// that configures the Cobra application.
//
// The AddCommandConfigure function takes three arguments:
// - alias: an alias for the configure subcommand
// - basename: the filename of the configuration file
// - defaultConfig: a function that returns a reader with the default
// configuration
//
// The AddCommandConfigure function does not return any value. It is
// designed to be used as a setter function, which means that the
// function will not return until the Cobra application's logic has
// been set.
AddCommandConfigure(alias, basename string, defaultConfig func() io.Reader)
// AddCommandPrintErrorCode adds a subcommand to the Cobra application
// that prints the error code with package path related.
//
// The AddCommandPrintErrorCode function takes a single argument of type
// FuncPrintErrorCode, which is a function that takes two arguments of
// type string and prints the error code and the related package path.
//
// The AddCommandPrintErrorCode function does not return any value. It is
// designed to be used as a setter function, which means that the
// function will not return until the Cobra application's logic has
// been set.
AddCommandPrintErrorCode(fct FuncPrintErrorCode)
// Execute executes the Cobra application's logic.
//
// The Execute function will execute the application's logic by
// calling the Cobra application's root command's Execute function.
//
// The Execute function will return an error if the application's
// logic encounters an error during execution.
//
// The Execute function does not return any other value. It is
// designed to be used as a terminal function, which means that
// the function will not return until the application's logic has
// been executed or an error has been encountered.
Execute() error
// Cobra returns a new Cobra object.
//
// The Cobra object is returned with all its fields set to nil.
// The caller is responsible for initializing the fields of the Cobra object.
//
// The Cobra object returned by this function is a root command of the Cobra application.
// It is the top-level command of the application, and it is responsible for
// executing the application's logic.
//
// The Cobra object returned by this function is not configured by default.
// The caller is responsible for configuring the Cobra object before executing
// the application's logic.
Cobra() *spfcbr.Command
// ConfigureCheckArgs checks if the arguments passed to the Configure command are valid.
//
// It returns an error if the arguments are invalid or if there is a problem with the
// configuration file generation.
//
// basename is the base name of the file to be generated. If basename is empty, the
// package name will be used as the base name.
//
// args is the list of arguments passed to the Configure command.
//
// The function returns an error if anything goes wrong.
ConfigureCheckArgs(basename string, args []string) error
// ConfigureWriteConfig generates a configuration file based on giving existing config flag
// override by passed flag in command line and completed with default for non existing values.
//
// basename is the base name of the file to be generated. If basename is empty, the
// package name will be used as the base name.
//
// defaultConfig is a function to read the default configuration.
//
// printMsg is a function to print the success message after generating the configuration file.
// If printMsg is nil, the function will not be called.
//
// The function returns an error if anything goes wrong.
ConfigureWriteConfig(basename string, defaultConfig func() io.Reader, printMsg func(pkg, file string)) error
}
// New returns a new Cobra object.
//
// The Cobra object is returned with all its fields set to nil.
// The caller is responsible for initializing the fields of the Cobra object.
func New() Cobra {
return &cobra{
c: nil,
s: nil,
v: nil,
i: nil,
l: nil,
f: "",
}
}