mirror of
https://github.com/LukeHagar/plexgo.git
synced 2025-12-06 04:20:46 +00:00
regenerated with new spec
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
// Code generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
|
||||
// Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
|
||||
|
||||
package utils
|
||||
|
||||
@@ -6,12 +6,23 @@ import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"math/big"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"time"
|
||||
|
||||
"github.com/ericlagergren/decimal"
|
||||
|
||||
"github.com/LukeHagar/plexgo/types"
|
||||
)
|
||||
|
||||
func PopulateQueryParams(_ context.Context, req *http.Request, queryParams interface{}, globals interface{}) error {
|
||||
// Query parameters may already be present from overriding URL
|
||||
if req.URL.RawQuery != "" {
|
||||
return nil
|
||||
}
|
||||
|
||||
values := url.Values{}
|
||||
|
||||
globalsAlreadyPopulated, err := populateQueryParams(queryParams, globals, values, []string{})
|
||||
@@ -132,56 +143,99 @@ func populateDeepObjectParams(tag *paramTag, objType reflect.Type, objValue refl
|
||||
return values
|
||||
}
|
||||
|
||||
if objType.Kind() == reflect.Pointer {
|
||||
objType = objType.Elem()
|
||||
if objValue.Kind() == reflect.Pointer {
|
||||
objValue = objValue.Elem()
|
||||
}
|
||||
|
||||
switch objType.Kind() {
|
||||
case reflect.Struct:
|
||||
for i := 0; i < objType.NumField(); i++ {
|
||||
fieldType := objType.Field(i)
|
||||
valType := objValue.Field(i)
|
||||
|
||||
if isNil(fieldType.Type, valType) {
|
||||
continue
|
||||
}
|
||||
|
||||
if fieldType.Type.Kind() == reflect.Pointer {
|
||||
valType = valType.Elem()
|
||||
}
|
||||
|
||||
qpTag := parseQueryParamTag(fieldType)
|
||||
if qpTag == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
switch valType.Kind() {
|
||||
case reflect.Array, reflect.Slice:
|
||||
for i := 0; i < valType.Len(); i++ {
|
||||
values.Add(fmt.Sprintf("%s[%s]", tag.ParamName, qpTag.ParamName), valToString(valType.Index(i).Interface()))
|
||||
}
|
||||
default:
|
||||
values.Add(fmt.Sprintf("%s[%s]", tag.ParamName, qpTag.ParamName), valToString(valType.Interface()))
|
||||
}
|
||||
}
|
||||
switch objValue.Kind() {
|
||||
case reflect.Map:
|
||||
iter := objValue.MapRange()
|
||||
for iter.Next() {
|
||||
switch iter.Value().Kind() {
|
||||
case reflect.Array, reflect.Slice:
|
||||
for i := 0; i < iter.Value().Len(); i++ {
|
||||
values.Add(fmt.Sprintf("%s[%s]", tag.ParamName, iter.Key().String()), valToString(iter.Value().Index(i).Interface()))
|
||||
}
|
||||
default:
|
||||
values.Add(fmt.Sprintf("%s[%s]", tag.ParamName, iter.Key().String()), valToString(iter.Value().Interface()))
|
||||
}
|
||||
}
|
||||
populateDeepObjectParamsMap(values, tag.ParamName, objValue)
|
||||
case reflect.Struct:
|
||||
populateDeepObjectParamsStruct(values, tag.ParamName, objValue)
|
||||
}
|
||||
|
||||
return values
|
||||
}
|
||||
|
||||
func populateDeepObjectParamsArray(qsValues url.Values, priorScope string, value reflect.Value) {
|
||||
if value.Kind() != reflect.Array && value.Kind() != reflect.Slice {
|
||||
return
|
||||
}
|
||||
|
||||
for i := 0; i < value.Len(); i++ {
|
||||
qsValues.Add(priorScope, valToString(value.Index(i).Interface()))
|
||||
}
|
||||
}
|
||||
|
||||
func populateDeepObjectParamsMap(qsValues url.Values, priorScope string, mapValue reflect.Value) {
|
||||
if mapValue.Kind() != reflect.Map {
|
||||
return
|
||||
}
|
||||
|
||||
iter := mapValue.MapRange()
|
||||
|
||||
for iter.Next() {
|
||||
scope := priorScope + "[" + iter.Key().String() + "]"
|
||||
iterValue := iter.Value()
|
||||
|
||||
switch iterValue.Kind() {
|
||||
case reflect.Array, reflect.Slice:
|
||||
populateDeepObjectParamsArray(qsValues, scope, iterValue)
|
||||
case reflect.Map:
|
||||
populateDeepObjectParamsMap(qsValues, scope, iterValue)
|
||||
default:
|
||||
qsValues.Add(scope, valToString(iterValue.Interface()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func populateDeepObjectParamsStruct(qsValues url.Values, priorScope string, structValue reflect.Value) {
|
||||
if structValue.Kind() != reflect.Struct {
|
||||
return
|
||||
}
|
||||
|
||||
structType := structValue.Type()
|
||||
|
||||
for i := 0; i < structType.NumField(); i++ {
|
||||
field := structType.Field(i)
|
||||
fieldValue := structValue.Field(i)
|
||||
|
||||
if isNil(field.Type, fieldValue) {
|
||||
continue
|
||||
}
|
||||
|
||||
if fieldValue.Kind() == reflect.Pointer {
|
||||
fieldValue = fieldValue.Elem()
|
||||
}
|
||||
|
||||
qpTag := parseQueryParamTag(field)
|
||||
|
||||
if qpTag == nil {
|
||||
continue
|
||||
}
|
||||
|
||||
scope := priorScope + "[" + qpTag.ParamName + "]"
|
||||
|
||||
switch fieldValue.Kind() {
|
||||
case reflect.Array, reflect.Slice:
|
||||
populateDeepObjectParamsArray(qsValues, scope, fieldValue)
|
||||
case reflect.Map:
|
||||
populateDeepObjectParamsMap(qsValues, scope, fieldValue)
|
||||
case reflect.Struct:
|
||||
switch fieldValue.Type() {
|
||||
case reflect.TypeOf(big.Int{}), reflect.TypeOf(decimal.Big{}), reflect.TypeOf(time.Time{}), reflect.TypeOf(types.Date{}):
|
||||
qsValues.Add(scope, valToString(fieldValue.Interface()))
|
||||
|
||||
continue
|
||||
}
|
||||
|
||||
populateDeepObjectParamsStruct(qsValues, scope, fieldValue)
|
||||
default:
|
||||
qsValues.Add(scope, valToString(fieldValue.Interface()))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func populateFormParams(tag *paramTag, objType reflect.Type, objValue reflect.Value, delimiter string) url.Values {
|
||||
return populateForm(tag.ParamName, tag.Explode, objType, objValue, delimiter, func(fieldType reflect.StructField) string {
|
||||
qpTag := parseQueryParamTag(fieldType)
|
||||
|
||||
Reference in New Issue
Block a user