textvars

Go Reference

Text replacement functions that handle the empty string / trailing comma problem in a sane way:
(cuts the character to the left when empty)

Example: Leading space:

textvars.ReplaceVar(`Hey {Name}!`, "Name", "Joe")
// "Hey Joe!"

textvars.ReplaceVar(`Hey {Name}!`, "Name", "")
// "Hey!" 👍

strings.ReplaceAll(`Hey {Name}!`, "{Name}", "")
// "Hey !" 🫤

Example: Leading comma:

textvars.ReplaceVar(`Apples,{Fruit},Bananas`, "Fruit", "Oranges")
// "Apples,Oranges,Bananas"

textvars.ReplaceVar(`Apples,{Fruit},Bananas`, "Fruit", "")
// "Apples,Bananas" 👍

strings.ReplaceAll(`Apples,{Fruit},Bananas`, "{Fruit}", "")
// "Apples,,Bananas" 🫤

Example: Multiple Vars

tmpl := `{#}. {Name}`
vars := map[string]string{
    "#": "1",
    "Name": "Joe",
}
text, err := textvars.ReplaceVars(tmpl, vars)
// "1. Joe"
// errors if any {...} are left over

Note: This is the sort of thing that's it's probably better to copy and paste rather than to have as a dependency, but I wanted to have it for myself as a convenience in my own repo of tools, so here it is.

Other Uses

It seemed like an okay idea at the time, so I also baked in some other uses:

Syntax Example "Joe" Empty ("") Comment
{Name} Hey {Name}! Hey Joe! Hey! cuts left character if empty
{Name-} 1,{Name-},3 1,Joe,3 1,3 cuts right character if empty
{-Name-} Hey! {Name}! Hey! Joe! Hey! cuts left and right if empty
{+Name} Name:{+Name} Name:Joe Name: keeps left character always

However, I haven't actually had the use case for those yet and you probably won't either... so don't use what you don't need. 🙃

I DO NOT plan on making a robust template system. I was only interested in solving the leading space / trailing comma problem for sendsms.

Legal

CC0-1.0 (Public Domain)