70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Go
		
	
	
	
package common
 | 
						|
 | 
						|
// MapFlag represents a string map flag that tracks whether it was explicitly set
 | 
						|
type MapFlag interface {
 | 
						|
	// Value returns a copy of the current map value
 | 
						|
	Value() map[string]string
 | 
						|
 | 
						|
	// WasExplicitlySet returns whether the flag was explicitly set
 | 
						|
	WasExplicitlySet() bool
 | 
						|
 | 
						|
	// Set sets the value and marks the flag as explicitly set
 | 
						|
	Set(value map[string]string)
 | 
						|
 | 
						|
	// SetKey sets a specific key-value pair and marks the flag as explicitly set
 | 
						|
	SetKey(key, value string)
 | 
						|
}
 | 
						|
 | 
						|
// mapFlag is the implementation of MapFlag
 | 
						|
type mapFlag struct {
 | 
						|
	value            map[string]string
 | 
						|
	wasExplicitlySet bool
 | 
						|
}
 | 
						|
 | 
						|
// NewMapFlag creates a new MapFlag with default values
 | 
						|
func NewMapFlag(defaultValue map[string]string) MapFlag {
 | 
						|
	// Create a copy of the default value to avoid modifying the original
 | 
						|
	valueCopy := make(map[string]string, len(defaultValue))
 | 
						|
	for k, v := range defaultValue {
 | 
						|
		valueCopy[k] = v
 | 
						|
	}
 | 
						|
 | 
						|
	return &mapFlag{
 | 
						|
		value:            valueCopy,
 | 
						|
		wasExplicitlySet: false,
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
// Value returns a copy of the current map value
 | 
						|
func (mf *mapFlag) Value() map[string]string {
 | 
						|
	// Create a copy to prevent external modification of internal state
 | 
						|
	result := make(map[string]string, len(mf.value))
 | 
						|
	for k, v := range mf.value {
 | 
						|
		result[k] = v
 | 
						|
	}
 | 
						|
	return result
 | 
						|
}
 | 
						|
 | 
						|
// WasExplicitlySet returns whether the flag was explicitly set
 | 
						|
func (mf *mapFlag) WasExplicitlySet() bool {
 | 
						|
	return mf.wasExplicitlySet
 | 
						|
}
 | 
						|
 | 
						|
// Set sets the value and marks the flag as explicitly set
 | 
						|
func (mf *mapFlag) Set(value map[string]string) {
 | 
						|
	// Create a copy of the value to avoid modifying the original
 | 
						|
	valueCopy := make(map[string]string, len(value))
 | 
						|
	for k, v := range value {
 | 
						|
		valueCopy[k] = v
 | 
						|
	}
 | 
						|
 | 
						|
	mf.value = valueCopy
 | 
						|
	mf.wasExplicitlySet = true
 | 
						|
}
 | 
						|
 | 
						|
// SetKey sets a specific key-value pair and marks the flag as explicitly set
 | 
						|
func (mf *mapFlag) SetKey(key, value string) {
 | 
						|
	mf.value[key] = value
 | 
						|
	mf.wasExplicitlySet = true
 | 
						|
}
 |