52 lines
		
	
	
	
		
			748 B
		
	
	
	
		
			Go
		
	
	
	
	
	
		
		
			
		
	
	
			52 lines
		
	
	
	
		
			748 B
		
	
	
	
		
			Go
		
	
	
	
	
	
|  | package types | ||
|  | 
 | ||
|  | import "fmt" | ||
|  | 
 | ||
|  | type IntOrString struct { | ||
|  | 	intVal int | ||
|  | 	strVal string | ||
|  | 	isInt  bool | ||
|  | } | ||
|  | 
 | ||
|  | func (is *IntOrString) Set(val any) error { | ||
|  | 	switch v := val.(type) { | ||
|  | 	case int: | ||
|  | 	case int8: | ||
|  | 	case int16: | ||
|  | 	case int32: | ||
|  | 	case int64: | ||
|  | 	case uint: | ||
|  | 	case uint8: | ||
|  | 	case uint16: | ||
|  | 	case uint32: | ||
|  | 		is.isInt = true | ||
|  | 		is.intVal = int(v) | ||
|  | 		return nil | ||
|  | 	case string: | ||
|  | 		is.isInt = false | ||
|  | 		is.strVal = v | ||
|  | 		return nil | ||
|  | 	case []byte: | ||
|  | 		is.isInt = false | ||
|  | 		is.strVal = string(v) | ||
|  | 		return nil | ||
|  | 	} | ||
|  | 
 | ||
|  | 	//nolint:err113 // Temp skip | ||
|  | 	return fmt.Errorf("invalid type: %T", val) | ||
|  | } | ||
|  | 
 | ||
|  | func (is IntOrString) IsZero() bool { | ||
|  | 	if is.isInt { | ||
|  | 		return is.intVal == 0 | ||
|  | 	} | ||
|  | 	return is.strVal == "" | ||
|  | } | ||
|  | 
 | ||
|  | func (is IntOrString) Value() any { | ||
|  | 	if is.isInt { | ||
|  | 		return is.intVal | ||
|  | 	} | ||
|  | 	return is.strVal | ||
|  | } |