Example #1
0
func PrntFunctionMaker(boolcap bool, tab, strbeg, strend, arrbeg, arrend, objbeg, objend, keybeg, keyend string) interface{} {
	var vals func(interface{}, ...int) string
	var tabs func(int) string

	arrmid, objmid, newline := ",", ",", "\n"

	tabs = func(level int) string {
		str := ""

		for i := 0; i < level; i++ {
			str += tab
		}

		return str
	}

	vals = func(data interface{}, level ...int) string {
		typ, lev := reflect.TypeOf(data).String(), 1

		if len(level) == 1 {
			lev = level[0]
		}

		if typ == "bool" {
			str := strconv.FormatBool(data.(bool))

			if boolcap {
				str = inflect.Capitalize(str)
			}

			return str
		}

		if typ == "string" {
			return strbeg + data.(string) + strend
		}

		if typ == "int" {
			return strconv.Itoa(data.(int))
		}

		if typ == "float64" {
			return strconv.FormatFloat(data.(float64), 'f', -1, 64)
		}

		if typ == "[]interface {}" {
			str := arrbeg

			for _, v := range data.([]interface{}) {
				str += newline + tabs(lev) + vals(v, lev+1) + arrmid
			}

			return str[0:len(str)-len(arrmid)] + newline + tabs(lev-1) + arrend
		}

		if typ == "map[string]interface {}" {
			str := objbeg

			for k, v := range data.(map[string]interface{}) {
				str += newline + tabs(lev) + keybeg + k + keyend + vals(v, lev+1) + objmid
			}

			return str[0:len(str)-len(objmid)] + newline + tabs(lev-1) + objend
		}

		return ""
	}

	return func(args interface{}, sep string, notLast bool) string {
		str := ""

		if args == nil {
			return str
		}

		for _, v := range args.([]interface{}) {
			str += vals(v.(map[string]interface{})["value"]) + sep
		}

		if !notLast {
			return str[0 : len(str)-len(sep)]
		} else {
			return str
		}
	}
}
Example #2
0
func PrntFunctionMaker(boolcap bool, tab, strbeg, strend, arrbeg, arrend, objbeg, objend, keybeg, keyend string) interface{} {
	var vals func(interface{}, ...int) string
	var tabs func(int) string

	arrmid, objmid, newline := ",", ",", "\n"

	tabs = func(level int) string {
		str := ""

		for i := 0; i < level; i++ {
			str += tab
		}

		return str
	}

	vals = func(data interface{}, level ...int) string {
		typ, lev := reflect.TypeOf(data).String(), 1

		if len(level) == 1 {
			lev = level[0]
		}

		if typ == "bool" {
			str := strconv.FormatBool(data.(bool))

			if boolcap {
				str = inflect.Capitalize(str)
			}

			return str
		}

		if typ == "string" {
			return strbeg + data.(string) + strend
		}

		if typ == "int" {
			return strconv.Itoa(data.(int))
		}

		if typ == "float64" {
			return strconv.FormatFloat(data.(float64), 'f', -1, 64)
		}

		if typ == "[]interface {}" {
			str := arrbeg

			for _, v := range data.([]interface{}) {
				str += newline + tabs(lev) + vals(v, lev+1) + arrmid
			}

			return str[0:len(str)-len(arrmid)] + newline + tabs(lev-1) + arrend
		}

		if typ == "map[string]interface {}" {
			str := objbeg

			for k, v := range data.(map[string]interface{}) {
				str += newline + tabs(lev) + keybeg + k + keyend + vals(v, lev+1) + objmid
			}

			return str[0:len(str)-len(objmid)] + newline + tabs(lev-1) + objend
		}

		return ""
	}

	return func(api interface{}, doc map[string]DocParam, sep string, notLast bool) string {
		str, typ := "", reflect.TypeOf(api).String()

		if typ == "[]string" {
			for _, v := range api.([]string) {
				str += vals(doc[v].Value) + sep
			}
		} else if typ == "[]alpaca.ApiParam" {
			for _, v := range api.([]ApiParam) {
				if v.Required {
					str += vals(doc[v.Name].Value) + sep
				}
			}
		} else {
			return str
		}

		if str != "" && !notLast {
			return str[0 : len(str)-len(sep)]
		}

		return str
	}
}