github.com/lmorg/murex@v0.0.0-20240217211045-e081c89cd4ef/utils/inject/inject.go (about) 1 package inject 2 3 import "fmt" 4 5 // String injects one string into another at a given position 6 func String(old, insert string, pos int) (string, error) { 7 switch { 8 case len(old) == 0: 9 if pos == 0 { 10 return insert, nil 11 } 12 13 return "", fmt.Errorf("pos cannot be non-zero when old is empty") 14 15 case pos < 0: 16 return "", fmt.Errorf("pos cannot be less than zero") 17 18 case len(old) < pos: 19 return "", fmt.Errorf("Len of old is less than pos") 20 21 case pos == 0: 22 return insert + old, nil 23 24 case pos == len(old): 25 return old + insert, nil 26 27 default: 28 return old[:pos] + insert + old[pos:], nil 29 } 30 } 31 32 // Rune injects one []rune into another at a given position 33 func Rune(old, insert []rune, pos int) ([]rune, error) { 34 switch { 35 case len(old) == 0: 36 if pos == 0 { 37 return insert, nil 38 } 39 40 return []rune{}, fmt.Errorf("pos cannot be non-zero when old is empty") 41 42 case pos < 0: 43 return []rune{}, fmt.Errorf("pos cannot be less than zero") 44 45 case len(old) < pos: 46 return []rune{}, fmt.Errorf("Len of old is less than pos") 47 48 case pos == 0: 49 return append(insert, old...), nil 50 51 case pos == len(old): 52 return append(old, insert...), nil 53 54 default: 55 new := make([]rune, len(old)+len(insert)) 56 for i := 0; i < pos; i++ { 57 new[i] = old[i] 58 } 59 for i := 0; i < len(insert); i++ { 60 new[pos+i] = insert[i] 61 } 62 l := len(insert) 63 for i := pos; i < len(old); i++ { 64 new[l+i] = old[i] 65 } 66 67 return new, nil 68 } 69 }