Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 11 additions & 4 deletions pkg/safe/state.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,13 +226,20 @@ func StateModifyWithResult[T resource.Resource](ctx context.Context, st state.St
return typeAssertOrZero[T](got, err)
}

// ListedResource is an interface that represents a resource in a list.
//
// It is a subset of resource.Resource that only exposes required methods.
type ListedResource interface {
Metadata() *resource.Metadata
}

// List is a type safe wrapper around resource.List.
type List[T resource.Resource] struct {
type List[T ListedResource] struct {
list resource.List
}

// NewList creates a new List.
func NewList[T resource.Resource](list resource.List) List[T] {
func NewList[T ListedResource](list resource.List) List[T] {
return List[T]{list}
}

Expand Down Expand Up @@ -354,15 +361,15 @@ func (l *List[T]) Pointers() iter.Seq[resource.Pointer] {
}

// ListIterator is a generic iterator over resource.Resource slice.
type ListIterator[T resource.Resource] struct {
type ListIterator[T ListedResource] struct {
list List[T]
pos int
}

// IteratorFromList returns a new iterator over the given list.
//
// Deprecated: use [List.All] instead.
func IteratorFromList[T resource.Resource](list List[T]) ListIterator[T] {
func IteratorFromList[T ListedResource](list List[T]) ListIterator[T] {
return ListIterator[T]{pos: 0, list: list}
}

Expand Down