54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
|
package serv
|
||
|
|
||
|
import (
|
||
|
"context"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"strconv"
|
||
|
|
||
|
"github.com/valyala/fasttemplate"
|
||
|
)
|
||
|
|
||
|
func varMap(ctx context.Context, vars variables) variables {
|
||
|
userIDFn := func(w io.Writer, _ string) (int, error) {
|
||
|
if v := ctx.Value(userIDKey); v != nil {
|
||
|
return w.Write([]byte(v.(string)))
|
||
|
}
|
||
|
return 0, errNoUserID
|
||
|
}
|
||
|
|
||
|
userIDProviderFn := func(w io.Writer, _ string) (int, error) {
|
||
|
if v := ctx.Value(userIDProviderKey); v != nil {
|
||
|
return w.Write([]byte(v.(string)))
|
||
|
}
|
||
|
return 0, errNoUserID
|
||
|
}
|
||
|
|
||
|
userIDTag := fasttemplate.TagFunc(userIDFn)
|
||
|
userIDProviderTag := fasttemplate.TagFunc(userIDProviderFn)
|
||
|
|
||
|
vm := variables{
|
||
|
"user_id": userIDTag,
|
||
|
"user_id_provider": userIDProviderTag,
|
||
|
"USER_ID": userIDTag,
|
||
|
"USER_ID_PROVIDER": userIDProviderTag,
|
||
|
}
|
||
|
|
||
|
for k, v := range vars {
|
||
|
if _, ok := vm[k]; ok {
|
||
|
continue
|
||
|
}
|
||
|
switch val := v.(type) {
|
||
|
case string:
|
||
|
vm[k] = val
|
||
|
case int:
|
||
|
vm[k] = strconv.Itoa(val)
|
||
|
case int64:
|
||
|
vm[k] = strconv.FormatInt(val, 64)
|
||
|
case float64:
|
||
|
vm[k] = fmt.Sprintf("%.0f", val)
|
||
|
}
|
||
|
}
|
||
|
return vm
|
||
|
}
|