mirror of
				https://github.com/steveiliop56/tinyauth.git
				synced 2025-10-28 04:35:40 +00:00 
			
		
		
		
	 0227af6d2b
			
		
	
	0227af6d2b
	
	
	
		
			
			* refactor: rework decoders logic for cleaner code * refactor: use strcase lib to handle text case conversions
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package decoders
 | |
| 
 | |
| import (
 | |
| 	"reflect"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/stoewer/go-strcase"
 | |
| )
 | |
| 
 | |
| func normalizeKeys[T any](input map[string]string, root string, sep string) map[string]string {
 | |
| 	knownKeys := getKnownKeys[T]()
 | |
| 	normalized := make(map[string]string)
 | |
| 
 | |
| 	for k, v := range input {
 | |
| 		parts := []string{"tinyauth"}
 | |
| 
 | |
| 		key := strings.ToLower(k)
 | |
| 		key = strings.ReplaceAll(key, sep, "-")
 | |
| 
 | |
| 		suffix := ""
 | |
| 
 | |
| 		for _, known := range knownKeys {
 | |
| 			if strings.HasSuffix(key, known) {
 | |
| 				suffix = known
 | |
| 				break
 | |
| 			}
 | |
| 		}
 | |
| 
 | |
| 		if suffix == "" {
 | |
| 			continue
 | |
| 		}
 | |
| 
 | |
| 		parts = append(parts, root)
 | |
| 
 | |
| 		id := strings.TrimPrefix(key, root+"-")
 | |
| 		id = strings.TrimSuffix(id, "-"+suffix)
 | |
| 
 | |
| 		if id == "" {
 | |
| 			continue
 | |
| 		}
 | |
| 
 | |
| 		parts = append(parts, id)
 | |
| 		parts = append(parts, suffix)
 | |
| 
 | |
| 		final := ""
 | |
| 
 | |
| 		for i, part := range parts {
 | |
| 			if i > 0 {
 | |
| 				final += "."
 | |
| 			}
 | |
| 			final += strcase.LowerCamelCase(part)
 | |
| 		}
 | |
| 
 | |
| 		normalized[final] = v
 | |
| 	}
 | |
| 
 | |
| 	return normalized
 | |
| }
 | |
| 
 | |
| func getKnownKeys[T any]() []string {
 | |
| 	var keys []string
 | |
| 	var t T
 | |
| 
 | |
| 	v := reflect.ValueOf(t)
 | |
| 	typeOfT := v.Type()
 | |
| 
 | |
| 	for field := range typeOfT.NumField() {
 | |
| 		if typeOfT.Field(field).Tag.Get("field") != "" {
 | |
| 			keys = append(keys, typeOfT.Field(field).Tag.Get("field"))
 | |
| 			continue
 | |
| 		}
 | |
| 		keys = append(keys, strcase.KebabCase(typeOfT.Field(field).Name))
 | |
| 	}
 | |
| 
 | |
| 	return keys
 | |
| }
 |