2026-02-21 15:23:07 +00:00
|
|
|
package forge
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"net/url"
|
2026-04-02 08:01:02 +00:00
|
|
|
"sort"
|
|
|
|
|
"strconv"
|
|
|
|
|
"strings"
|
2026-03-26 13:27:06 +00:00
|
|
|
|
|
|
|
|
core "dappco.re/go/core"
|
2026-02-21 15:23:07 +00:00
|
|
|
)
|
|
|
|
|
|
|
|
|
|
// Params maps path variable names to values.
|
|
|
|
|
// Example: Params{"owner": "core", "repo": "go-forge"}
|
2026-03-26 18:00:20 +00:00
|
|
|
//
|
|
|
|
|
// Usage:
|
|
|
|
|
//
|
|
|
|
|
// params := forge.Params{"owner": "core", "repo": "go-forge"}
|
|
|
|
|
// _ = params
|
2026-02-21 15:23:07 +00:00
|
|
|
type Params map[string]string
|
|
|
|
|
|
2026-04-02 08:01:02 +00:00
|
|
|
// String returns a safe summary of the path parameters.
|
|
|
|
|
//
|
|
|
|
|
// Usage:
|
|
|
|
|
//
|
|
|
|
|
// _ = forge.Params{"owner": "core"}.String()
|
|
|
|
|
func (p Params) String() string {
|
|
|
|
|
if p == nil {
|
|
|
|
|
return "forge.Params{<nil>}"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
keys := make([]string, 0, len(p))
|
|
|
|
|
for k := range p {
|
|
|
|
|
keys = append(keys, k)
|
|
|
|
|
}
|
|
|
|
|
sort.Strings(keys)
|
|
|
|
|
|
|
|
|
|
var b strings.Builder
|
|
|
|
|
b.WriteString("forge.Params{")
|
|
|
|
|
for i, k := range keys {
|
|
|
|
|
if i > 0 {
|
|
|
|
|
b.WriteString(", ")
|
|
|
|
|
}
|
|
|
|
|
b.WriteString(k)
|
|
|
|
|
b.WriteString("=")
|
|
|
|
|
b.WriteString(strconv.Quote(p[k]))
|
|
|
|
|
}
|
|
|
|
|
b.WriteString("}")
|
|
|
|
|
return b.String()
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// GoString returns a safe Go-syntax summary of the path parameters.
|
|
|
|
|
//
|
|
|
|
|
// Usage:
|
|
|
|
|
//
|
|
|
|
|
// _ = fmt.Sprintf("%#v", forge.Params{"owner": "core"})
|
|
|
|
|
func (p Params) GoString() string { return p.String() }
|
|
|
|
|
|
2026-02-21 15:23:07 +00:00
|
|
|
// ResolvePath substitutes {placeholders} in path with values from params.
|
2026-03-26 18:00:20 +00:00
|
|
|
//
|
|
|
|
|
// Usage:
|
|
|
|
|
//
|
|
|
|
|
// path := forge.ResolvePath("/api/v1/repos/{owner}/{repo}", forge.Params{"owner": "core", "repo": "go-forge"})
|
|
|
|
|
// _ = path
|
2026-02-21 15:23:07 +00:00
|
|
|
func ResolvePath(path string, params Params) string {
|
|
|
|
|
for k, v := range params {
|
2026-03-26 13:27:06 +00:00
|
|
|
path = core.Replace(path, "{"+k+"}", url.PathEscape(v))
|
2026-02-21 15:23:07 +00:00
|
|
|
}
|
|
|
|
|
return path
|
|
|
|
|
}
|