goyave.dev/goyave/v5@v5.0.0-rc9.0.20240517145003-d3f977d0b9f3/config/default.go (about)

     1  package config
     2  
     3  import "reflect"
     4  
     5  var configDefaults = object{
     6  	"app": object{
     7  		"name":            &Entry{"goyave", []any{}, reflect.String, false},
     8  		"environment":     &Entry{"localhost", []any{}, reflect.String, false},
     9  		"debug":           &Entry{true, []any{}, reflect.Bool, false},
    10  		"defaultLanguage": &Entry{"en-US", []any{}, reflect.String, false},
    11  	},
    12  	"server": object{
    13  		"host":                  &Entry{"127.0.0.1", []any{}, reflect.String, false},
    14  		"domain":                &Entry{"", []any{}, reflect.String, false},
    15  		"port":                  &Entry{8080, []any{}, reflect.Int, false},
    16  		"writeTimeout":          &Entry{10, []any{}, reflect.Int, false},
    17  		"readTimeout":           &Entry{10, []any{}, reflect.Int, false},
    18  		"readHeaderTimeout":     &Entry{10, []any{}, reflect.Int, false},
    19  		"idleTimeout":           &Entry{20, []any{}, reflect.Int, false},
    20  		"websocketCloseTimeout": &Entry{10, []any{}, reflect.Int, false},
    21  		"maxUploadSize":         &Entry{10.0, []any{}, reflect.Float64, false},
    22  		"proxy": object{
    23  			"protocol": &Entry{"http", []any{"http", "https"}, reflect.String, false},
    24  			"host":     &Entry{nil, []any{}, reflect.String, false},
    25  			"port":     &Entry{80, []any{}, reflect.Int, false},
    26  			"base":     &Entry{"", []any{}, reflect.String, false},
    27  		},
    28  	},
    29  	"database": object{
    30  		"connection":               &Entry{"none", []any{}, reflect.String, false},
    31  		"host":                     &Entry{"127.0.0.1", []any{}, reflect.String, false},
    32  		"port":                     &Entry{0, []any{}, reflect.Int, false},
    33  		"name":                     &Entry{"", []any{}, reflect.String, false},
    34  		"username":                 &Entry{"", []any{}, reflect.String, false},
    35  		"password":                 &Entry{"", []any{}, reflect.String, false},
    36  		"options":                  &Entry{"", []any{}, reflect.String, false},
    37  		"maxOpenConnections":       &Entry{20, []any{}, reflect.Int, false},
    38  		"maxIdleConnections":       &Entry{20, []any{}, reflect.Int, false},
    39  		"maxLifetime":              &Entry{300, []any{}, reflect.Int, false},
    40  		"defaultReadQueryTimeout":  &Entry{20000, []any{}, reflect.Int, false},
    41  		"defaultWriteQueryTimeout": &Entry{40000, []any{}, reflect.Int, false},
    42  		"config": object{
    43  			"skipDefaultTransaction":                   &Entry{false, []any{}, reflect.Bool, false},
    44  			"dryRun":                                   &Entry{false, []any{}, reflect.Bool, false},
    45  			"prepareStmt":                              &Entry{true, []any{}, reflect.Bool, false},
    46  			"disableNestedTransaction":                 &Entry{false, []any{}, reflect.Bool, false},
    47  			"allowGlobalUpdate":                        &Entry{false, []any{}, reflect.Bool, false},
    48  			"disableAutomaticPing":                     &Entry{false, []any{}, reflect.Bool, false},
    49  			"disableForeignKeyConstraintWhenMigrating": &Entry{false, []any{}, reflect.Bool, false},
    50  		},
    51  	},
    52  }
    53  
    54  func loadDefaults(src object, dst object) {
    55  	for k, v := range src {
    56  		if obj, ok := v.(object); ok {
    57  			sub := make(object, len(obj))
    58  			loadDefaults(obj, sub)
    59  			dst[k] = sub
    60  		} else {
    61  			entry := v.(*Entry)
    62  			value := entry.Value
    63  			t := reflect.TypeOf(value)
    64  			if t != nil && t.Kind() == reflect.Slice {
    65  				list := reflect.ValueOf(value)
    66  				length := list.Len()
    67  				slice := reflect.MakeSlice(reflect.SliceOf(t.Elem()), 0, length)
    68  				for i := 0; i < length; i++ {
    69  					slice = reflect.Append(slice, list.Index(i))
    70  				}
    71  				value = slice.Interface()
    72  			}
    73  			dst[k] = &Entry{value, entry.AuthorizedValues, entry.Type, entry.IsSlice}
    74  		}
    75  	}
    76  }