package replacer import ( "strings" "github.com/projectdiscovery/nuclei/v2/pkg/protocols/common/marker" "github.com/projectdiscovery/nuclei/v2/pkg/types" ) // Replace replaces placeholders in template with values on the fly. func Replace(template string, values map[string]interface{}) string { var replacerItems []string builder := &strings.Builder{} for key, val := range values { builder.WriteString(marker.ParenthesisOpen) builder.WriteString(key) builder.WriteString(marker.ParenthesisClose) replacerItems = append(replacerItems, builder.String()) builder.Reset() replacerItems = append(replacerItems, types.ToString(val)) builder.WriteString(marker.General) builder.WriteString(key) builder.WriteString(marker.General) replacerItems = append(replacerItems, builder.String()) builder.Reset() replacerItems = append(replacerItems, types.ToString(val)) } replacer := strings.NewReplacer(replacerItems...) final := replacer.Replace(template) return final }