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  }