/*
 * Copyright (c) 2022 tursom. All rights reserved.
 * Use of this source code is governed by a GPL-3
 * license that can be found in the LICENSE file.
 */

package util

type (
	Stringer struct {
		stringer func() string
	}
)

func NewStringer(stringer func() string) Stringer {
	return Stringer{
		stringer: stringer,
	}
}

func (s Stringer) String() string {
	if s.stringer == nil {
		return "nil"
	}
	return s.stringer()
}

func Reverse[T any](s []T) []T {
	for i := 0; i < len(s)/2; i++ {
		temp := s[i]
		s[i] = s[len(s)-i-1]
		s[len(s)-i-1] = temp
	}

	return s
}