package internal

import (
	
	
	
)

func ( context.Context,  time.Duration) error {
	 := time.NewTimer()
	defer .Stop()

	select {
	case <-.C:
		return nil
	case <-.Done():
		return .Err()
	}
}

func ( reflect.Value) func() reflect.Value {
	if .Kind() == reflect.Array {
		var  int
		return func() reflect.Value {
			 := .Index()
			++
			return 
		}
	}

	 := .Type().Elem()

	if .Kind() == reflect.Ptr {
		 = .Elem()
		return func() reflect.Value {
			if .Len() < .Cap() {
				.Set(.Slice(0, .Len()+1))
				 := .Index(.Len() - 1)
				if .IsNil() {
					.Set(reflect.New())
				}
				return .Elem()
			}

			 := reflect.New()
			.Set(reflect.Append(, ))
			return .Elem()
		}
	}

	 := reflect.Zero()
	return func() reflect.Value {
		if .Len() < .Cap() {
			.Set(.Slice(0, .Len()+1))
			return .Index(.Len() - 1)
		}

		.Set(reflect.Append(, ))
		return .Index(.Len() - 1)
	}
}

func ( error) error {
	,  := .(interface {
		() error
	})
	if ! {
		return nil
	}
	return .()
}