12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package shared
- import (
- "errors"
- "net/url"
- "time"
- )
- type JSON = map[string]any
- func Get[T any](o JSON, key string) (T, error) {
- var zero T
- if value, ok := o[key]; !ok {
- return zero, errors.New("Object does not contain key " + key)
- } else if value, ok := value.(T); !ok {
- return zero, errors.New("Key " + key + " is not of the desired type")
- } else {
- return value, nil
- }
- }
- func GetNatural(o JSON, key string, language string) (string, error) {
- values, valuesErr := Get[JSON](o, key+"Map")
- if valuesErr == nil {
- if value, err := Get[string](values, language); err == nil {
- return value, nil
- }
- }
- if value, err := Get[string](o, key); err == nil {
- return value, nil
- }
- if valuesErr == nil {
- if value, err := Get[string](values, "und"); err == nil {
- return value, nil
- }
- }
- return "", errors.New("Natural language key " + key + " is not correctly present in object")
- }
- func GetTime(o JSON, key string) (time.Time, error) {
- if value, err := Get[string](o, key); err != nil {
- return time.Time{}, err
- } else {
- return time.Parse(time.RFC3339, value)
- }
- }
- func GetURL(o JSON, key string) (*url.URL, error) {
- if value, err := Get[string](o, key); err != nil {
- return nil, err
- } else {
- return url.Parse(value)
- }
- }
|