github.com/spread-ai/gqlgen@v0.0.0-20221124102857-a6c8ef538a1d/graphql/coercion.go (about)

     1  package graphql
     2  
     3  import (
     4  	"encoding/json"
     5  )
     6  
     7  // CoerceList applies coercion from a single value to a list.
     8  func CoerceList(v interface{}) []interface{} {
     9  	var vSlice []interface{}
    10  	if v != nil {
    11  		switch v := v.(type) {
    12  		case []interface{}:
    13  			// already a slice no coercion required
    14  			vSlice = v
    15  		case []string:
    16  			if len(v) > 0 {
    17  				vSlice = []interface{}{v[0]}
    18  			}
    19  		case []json.Number:
    20  			if len(v) > 0 {
    21  				vSlice = []interface{}{v[0]}
    22  			}
    23  		case []bool:
    24  			if len(v) > 0 {
    25  				vSlice = []interface{}{v[0]}
    26  			}
    27  		case []map[string]interface{}:
    28  			if len(v) > 0 {
    29  				vSlice = []interface{}{v[0]}
    30  			}
    31  		case []float64:
    32  			if len(v) > 0 {
    33  				vSlice = []interface{}{v[0]}
    34  			}
    35  		case []float32:
    36  			if len(v) > 0 {
    37  				vSlice = []interface{}{v[0]}
    38  			}
    39  		case []int:
    40  			if len(v) > 0 {
    41  				vSlice = []interface{}{v[0]}
    42  			}
    43  		case []int32:
    44  			if len(v) > 0 {
    45  				vSlice = []interface{}{v[0]}
    46  			}
    47  		case []int64:
    48  			if len(v) > 0 {
    49  				vSlice = []interface{}{v[0]}
    50  			}
    51  		default:
    52  			vSlice = []interface{}{v}
    53  		}
    54  	}
    55  	return vSlice
    56  }