package bunmodel

func sliceToDomain[T interface {
	ToDomain() (V, error)
}, V any](s []T) ([]V, error) {
	res := make([]V, 0, len(s))

	for _, el := range s {
		converted, err := el.ToDomain()
		if err != nil {
			return nil, err
		}

		res = append(res, converted)
	}

	return res, nil
}

func sliceToDomainWithRelations[T interface {
	ToDomainWithRelations() (V, error)
}, V any](s []T) ([]V, error) {
	res := make([]V, 0, len(s))

	for _, el := range s {
		converted, err := el.ToDomainWithRelations()
		if err != nil {
			return nil, err
		}

		res = append(res, converted)
	}

	return res, nil
}
