parcoursmob/renderer/func-maps.go

144 lines
2.3 KiB
Go
Executable File

package renderer
import (
"bytes"
"encoding/json"
"fmt"
"html/template"
"strings"
"time"
"gitlab.scity.coop/maas/navitia-golang/types"
)
func TimeFrom(d any) *time.Time {
if date, ok := d.(time.Time); ok {
return &date
} else if date, ok := d.(string); ok {
datetime, err := time.Parse("2006-01-02T15:04:05Z", date)
if err != nil {
panic(err)
}
return &datetime
}
return nil
}
func TimestampFrom(d any) *time.Time {
if date, ok := d.(time.Time); ok {
return &date
} else if date, ok := d.(string); ok {
datetime, err := time.Parse("2006-01-02T15:04:05Z", date)
if err != nil {
panic(err)
}
return &datetime
}
return nil
}
func TimeFormat(d any, f string) string {
date := TimeFrom(d)
if date == nil {
return ""
}
if date.Before(time.Now().Add(-24 * 365 * 30 * time.Hour)) {
return ""
}
return date.Format(f)
}
func GenderISO5218(d any) string {
if date, ok := d.(string); ok {
switch date {
case "0":
return "Inconnu"
case "1":
return "Masculin"
case "2":
return "Féminin"
case "9":
return "Sans objet"
}
}
if date, ok := d.(int64); ok {
switch date {
case 0:
return "Inconnu"
case 1:
return "Masculin"
case 2:
return "Féminin"
case 9:
return "Sans objet"
}
}
return ""
}
func JSON(v any) template.JS {
result, _ := json.Marshal(v)
return template.JS(result)
}
func RawJSON(v any) string {
buf := new(bytes.Buffer)
enc := json.NewEncoder(buf)
enc.SetEscapeHTML(false)
err := enc.Encode(&v)
if err != nil {
return ""
}
return strings.TrimSuffix(buf.String(), "\n")
}
func UnescapeHTML(s string) template.HTML {
return template.HTML(s)
}
func Dict(v ...interface{}) map[string]interface{} {
dict := map[string]interface{}{}
lenv := len(v)
for i := 0; i < lenv; i += 2 {
key := strval(v[i])
if i+1 >= lenv {
dict[key] = ""
continue
}
dict[key] = v[i+1]
}
return dict
}
func WalkingLength(s types.Section) (l int) {
l = 0
if s.Mode == "walking" {
for _, p := range s.Path {
l = l + int(p.Length)
}
}
return
}
func strval(v interface{}) string {
switch v := v.(type) {
case string:
return v
case []byte:
return string(v)
case error:
return v.Error()
case fmt.Stringer:
return v.String()
default:
return fmt.Sprintf("%v", v)
}
}
func Divide[V int | float64](a, b V) V {
return a / b
}