package utils
import (
"encoding/json"
"os"
)
// SliceFilter filters elements of a generic type from a slice based on a provided filter function.
//
// Parameters:
// - slice: The input slice containing elements of type T.
// - filter: A function that takes an element of type T and returns a boolean indicating whether to include the element in the result.
// Returns:
// - ret: A slice containing elements that satisfy the filtering condition.
func SliceFilter[T any](slice []T, filter func(T) bool) (ret []T) {
for _, s := range slice {
if filter(s) {
ret = append(ret, s)
}
return
// LoadJsonTestData decodes JSON data from a file and populates a variable of a generic type T.
// - testDataPath: The file path to the JSON data.
// - T: A variable of type T populated with the decoded JSON data.
// - error: An error, if any, encountered during file opening, decoding, or closing.
func LoadJsonTestData[T any](testDataPath string) (T, error) {
// Create a variable to store the decoded JSON data
var jsonData T
// Open the JSON file
file, err := os.Open(testDataPath)
if err != nil {
return jsonData, err
defer file.Close()
// Create a decoder
decoder := json.NewDecoder(file)
// Decode the JSON data into the struct
if err := decoder.Decode(&jsonData); err != nil {
return jsonData, nil