MultiPartsP

MultiPartsP is like MultiParts but with placeholders.

carapace.ActionStyledValuesDescribed(
	"keys/<key>", "key example", style.Default,
	"keys/<key>/<value>", "key/value example", style.Default,
	"styles/custom", "custom style", style.Of(style.Blue, style.Blink),
	"styles", "list", style.Yellow,
	"styles/<style>", "details", style.Default,
).MultiPartsP("/", "<.*>", func(placeholder string, matches map[string]string) carapace.Action {
	switch placeholder {
	case "<key>":
		return carapace.ActionValues("key1", "key2")
	case "<style>":
		return carapace.ActionStyles()
	case "<value>":
		switch matches["<key>"] {
		case "key1":
			return carapace.ActionValues("val1", "val2")
		case "key2":
			return carapace.ActionValues("val3", "val4")
		default:
			return carapace.ActionValues()
		}
	default:
		return carapace.ActionValues()
	}
})