mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-10-31 15:52:25 -05:00 
			
		
		
		
	* Add Swagger spec test script * Fix Swagger spec errors not related to statuses with polls * Add API tests that post a status with a poll * Fix creating a status with a poll from form params * Fix Swagger spec errors related to statuses with polls (this is the last error) * Fix Swagger spec warnings not related to unused definitions * Suppress a duplicate list update params definition that was somehow causing wrong param names * Add Swagger test to CI - updates Drone config - vendorizes go-swagger - fixes a file extension issue that caused the test script to generate JSON instead of YAML with the vendorized version * Put `Sample: ` on its own line everywhere * Remove unused id param from emojiCategoriesGet * Add 5 more pairs of profile fields to account update API Swagger * Remove Swagger prefix from dummy fields It makes the generated code look weird * Manually annotate params for statusCreate operation * Fix all remaining Swagger spec warnings - Change some models into operation parameters - Ignore models that already correspond to manually documented operation parameters but can't be trivially changed (those with file fields) * Documented that creating a status with scheduled_at isn't implemented yet * sign drone.yml * Fix filter API Swagger errors * fixup! Fix filter API Swagger errors --------- Co-authored-by: tobi <tobi.smethurst@protonmail.com>
		
			
				
	
	
		
			186 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			186 lines
		
	
	
	
		
			3.3 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package sprig
 | |
| 
 | |
| import (
 | |
| 	"fmt"
 | |
| 	"math"
 | |
| 	"strconv"
 | |
| 	"strings"
 | |
| 
 | |
| 	"github.com/spf13/cast"
 | |
| 	"github.com/shopspring/decimal"
 | |
| )
 | |
| 
 | |
| // toFloat64 converts 64-bit floats
 | |
| func toFloat64(v interface{}) float64 {
 | |
| 	return cast.ToFloat64(v)
 | |
| }
 | |
| 
 | |
| func toInt(v interface{}) int {
 | |
| 	return cast.ToInt(v)
 | |
| }
 | |
| 
 | |
| // toInt64 converts integer types to 64-bit integers
 | |
| func toInt64(v interface{}) int64 {
 | |
| 	return cast.ToInt64(v)
 | |
| }
 | |
| 
 | |
| func max(a interface{}, i ...interface{}) int64 {
 | |
| 	aa := toInt64(a)
 | |
| 	for _, b := range i {
 | |
| 		bb := toInt64(b)
 | |
| 		if bb > aa {
 | |
| 			aa = bb
 | |
| 		}
 | |
| 	}
 | |
| 	return aa
 | |
| }
 | |
| 
 | |
| func maxf(a interface{}, i ...interface{}) float64 {
 | |
| 	aa := toFloat64(a)
 | |
| 	for _, b := range i {
 | |
| 		bb := toFloat64(b)
 | |
| 		aa = math.Max(aa, bb)
 | |
| 	}
 | |
| 	return aa
 | |
| }
 | |
| 
 | |
| func min(a interface{}, i ...interface{}) int64 {
 | |
| 	aa := toInt64(a)
 | |
| 	for _, b := range i {
 | |
| 		bb := toInt64(b)
 | |
| 		if bb < aa {
 | |
| 			aa = bb
 | |
| 		}
 | |
| 	}
 | |
| 	return aa
 | |
| }
 | |
| 
 | |
| func minf(a interface{}, i ...interface{}) float64 {
 | |
| 	aa := toFloat64(a)
 | |
| 	for _, b := range i {
 | |
| 		bb := toFloat64(b)
 | |
| 		aa = math.Min(aa, bb)
 | |
| 	}
 | |
| 	return aa
 | |
| }
 | |
| 
 | |
| func until(count int) []int {
 | |
| 	step := 1
 | |
| 	if count < 0 {
 | |
| 		step = -1
 | |
| 	}
 | |
| 	return untilStep(0, count, step)
 | |
| }
 | |
| 
 | |
| func untilStep(start, stop, step int) []int {
 | |
| 	v := []int{}
 | |
| 
 | |
| 	if stop < start {
 | |
| 		if step >= 0 {
 | |
| 			return v
 | |
| 		}
 | |
| 		for i := start; i > stop; i += step {
 | |
| 			v = append(v, i)
 | |
| 		}
 | |
| 		return v
 | |
| 	}
 | |
| 
 | |
| 	if step <= 0 {
 | |
| 		return v
 | |
| 	}
 | |
| 	for i := start; i < stop; i += step {
 | |
| 		v = append(v, i)
 | |
| 	}
 | |
| 	return v
 | |
| }
 | |
| 
 | |
| func floor(a interface{}) float64 {
 | |
| 	aa := toFloat64(a)
 | |
| 	return math.Floor(aa)
 | |
| }
 | |
| 
 | |
| func ceil(a interface{}) float64 {
 | |
| 	aa := toFloat64(a)
 | |
| 	return math.Ceil(aa)
 | |
| }
 | |
| 
 | |
| func round(a interface{}, p int, rOpt ...float64) float64 {
 | |
| 	roundOn := .5
 | |
| 	if len(rOpt) > 0 {
 | |
| 		roundOn = rOpt[0]
 | |
| 	}
 | |
| 	val := toFloat64(a)
 | |
| 	places := toFloat64(p)
 | |
| 
 | |
| 	var round float64
 | |
| 	pow := math.Pow(10, places)
 | |
| 	digit := pow * val
 | |
| 	_, div := math.Modf(digit)
 | |
| 	if div >= roundOn {
 | |
| 		round = math.Ceil(digit)
 | |
| 	} else {
 | |
| 		round = math.Floor(digit)
 | |
| 	}
 | |
| 	return round / pow
 | |
| }
 | |
| 
 | |
| // converts unix octal to decimal
 | |
| func toDecimal(v interface{}) int64 {
 | |
| 	result, err := strconv.ParseInt(fmt.Sprint(v), 8, 64)
 | |
| 	if err != nil {
 | |
| 		return 0
 | |
| 	}
 | |
| 	return result
 | |
| }
 | |
| 
 | |
| func seq(params ...int) string {
 | |
| 	increment := 1
 | |
| 	switch len(params) {
 | |
| 	case 0:
 | |
| 		return ""
 | |
| 	case 1:
 | |
| 		start := 1
 | |
| 		end := params[0]
 | |
| 		if end < start {
 | |
| 			increment = -1
 | |
| 		}
 | |
| 		return intArrayToString(untilStep(start, end+increment, increment), " ")
 | |
| 	case 3:
 | |
| 		start := params[0]
 | |
| 		end := params[2]
 | |
| 		step := params[1]
 | |
| 		if end < start {
 | |
| 			increment = -1
 | |
| 			if step > 0 {
 | |
| 				return ""
 | |
| 			}
 | |
| 		}
 | |
| 		return intArrayToString(untilStep(start, end+increment, step), " ")
 | |
| 	case 2:
 | |
| 		start := params[0]
 | |
| 		end := params[1]
 | |
| 		step := 1
 | |
| 		if end < start {
 | |
| 			step = -1
 | |
| 		}
 | |
| 		return intArrayToString(untilStep(start, end+step, step), " ")
 | |
| 	default:
 | |
| 		return ""
 | |
| 	}
 | |
| }
 | |
| 
 | |
| func intArrayToString(slice []int, delimeter string) string {
 | |
| 	return strings.Trim(strings.Join(strings.Fields(fmt.Sprint(slice)), delimeter), "[]")
 | |
| }
 | |
| 
 | |
| // performs a float and subsequent decimal.Decimal conversion on inputs,
 | |
| // and iterates through a and b executing the mathmetical operation f
 | |
| func execDecimalOp(a interface{}, b []interface{}, f func(d1, d2 decimal.Decimal) decimal.Decimal) float64 {
 | |
| 	prt := decimal.NewFromFloat(toFloat64(a))
 | |
| 	for _, x := range b {
 | |
| 		dx := decimal.NewFromFloat(toFloat64(x))
 | |
| 		prt = f(prt, dx)
 | |
| 	}
 | |
| 	rslt, _ := prt.Float64()
 | |
| 	return rslt
 | |
| }
 |