mirror of
				https://github.com/superseriousbusiness/gotosocial.git
				synced 2025-11-03 21:52:25 -06:00 
			
		
		
		
	* start moving to bun * changing more stuff * more * and yet more * tests passing * seems stable now * more big changes * small fix * little fixes
		
			
				
	
	
		
			57 lines
		
	
	
	
		
			998 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			57 lines
		
	
	
	
		
			998 B
		
	
	
	
		
			Go
		
	
	
	
	
	
package internal
 | 
						|
 | 
						|
import (
 | 
						|
	"reflect"
 | 
						|
)
 | 
						|
 | 
						|
func MakeSliceNextElemFunc(v reflect.Value) func() reflect.Value {
 | 
						|
	if v.Kind() == reflect.Array {
 | 
						|
		var pos int
 | 
						|
		return func() reflect.Value {
 | 
						|
			v := v.Index(pos)
 | 
						|
			pos++
 | 
						|
			return v
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	elemType := v.Type().Elem()
 | 
						|
 | 
						|
	if elemType.Kind() == reflect.Ptr {
 | 
						|
		elemType = elemType.Elem()
 | 
						|
		return func() reflect.Value {
 | 
						|
			if v.Len() < v.Cap() {
 | 
						|
				v.Set(v.Slice(0, v.Len()+1))
 | 
						|
				elem := v.Index(v.Len() - 1)
 | 
						|
				if elem.IsNil() {
 | 
						|
					elem.Set(reflect.New(elemType))
 | 
						|
				}
 | 
						|
				return elem.Elem()
 | 
						|
			}
 | 
						|
 | 
						|
			elem := reflect.New(elemType)
 | 
						|
			v.Set(reflect.Append(v, elem))
 | 
						|
			return elem.Elem()
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	zero := reflect.Zero(elemType)
 | 
						|
	return func() reflect.Value {
 | 
						|
		if v.Len() < v.Cap() {
 | 
						|
			v.Set(v.Slice(0, v.Len()+1))
 | 
						|
			return v.Index(v.Len() - 1)
 | 
						|
		}
 | 
						|
 | 
						|
		v.Set(reflect.Append(v, zero))
 | 
						|
		return v.Index(v.Len() - 1)
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
func Unwrap(err error) error {
 | 
						|
	u, ok := err.(interface {
 | 
						|
		Unwrap() error
 | 
						|
	})
 | 
						|
	if !ok {
 | 
						|
		return nil
 | 
						|
	}
 | 
						|
	return u.Unwrap()
 | 
						|
}
 |