/*
Copyright 2021.

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Code generated by lister-gen. DO NOT EDIT.

package v1

import (
	v1 "lite.io/liteio/pkg/api/volume.antstor.alipay.com/v1"
	"k8s.io/apimachinery/pkg/api/errors"
	"k8s.io/apimachinery/pkg/labels"
	"k8s.io/client-go/tools/cache"
)

// AntstorSnapshotLister helps list AntstorSnapshots.
// All objects returned here must be treated as read-only.
type AntstorSnapshotLister interface {
	// List lists all AntstorSnapshots in the indexer.
	// Objects returned here must be treated as read-only.
	List(selector labels.Selector) (ret []*v1.AntstorSnapshot, err error)
	// AntstorSnapshots returns an object that can list and get AntstorSnapshots.
	AntstorSnapshots(namespace string) AntstorSnapshotNamespaceLister
	AntstorSnapshotListerExpansion
}

// antstorSnapshotLister implements the AntstorSnapshotLister interface.
type antstorSnapshotLister struct {
	indexer cache.Indexer
}

// NewAntstorSnapshotLister returns a new AntstorSnapshotLister.
func NewAntstorSnapshotLister(indexer cache.Indexer) AntstorSnapshotLister {
	return &antstorSnapshotLister{indexer: indexer}
}

// List lists all AntstorSnapshots in the indexer.
func (s *antstorSnapshotLister) List(selector labels.Selector) (ret []*v1.AntstorSnapshot, err error) {
	err = cache.ListAll(s.indexer, selector, func(m interface{}) {
		ret = append(ret, m.(*v1.AntstorSnapshot))
	})
	return ret, err
}

// AntstorSnapshots returns an object that can list and get AntstorSnapshots.
func (s *antstorSnapshotLister) AntstorSnapshots(namespace string) AntstorSnapshotNamespaceLister {
	return antstorSnapshotNamespaceLister{indexer: s.indexer, namespace: namespace}
}

// AntstorSnapshotNamespaceLister helps list and get AntstorSnapshots.
// All objects returned here must be treated as read-only.
type AntstorSnapshotNamespaceLister interface {
	// List lists all AntstorSnapshots in the indexer for a given namespace.
	// Objects returned here must be treated as read-only.
	List(selector labels.Selector) (ret []*v1.AntstorSnapshot, err error)
	// Get retrieves the AntstorSnapshot from the indexer for a given namespace and name.
	// Objects returned here must be treated as read-only.
	Get(name string) (*v1.AntstorSnapshot, error)
	AntstorSnapshotNamespaceListerExpansion
}

// antstorSnapshotNamespaceLister implements the AntstorSnapshotNamespaceLister
// interface.
type antstorSnapshotNamespaceLister struct {
	indexer   cache.Indexer
	namespace string
}

// List lists all AntstorSnapshots in the indexer for a given namespace.
func (s antstorSnapshotNamespaceLister) List(selector labels.Selector) (ret []*v1.AntstorSnapshot, err error) {
	err = cache.ListAllByNamespace(s.indexer, s.namespace, selector, func(m interface{}) {
		ret = append(ret, m.(*v1.AntstorSnapshot))
	})
	return ret, err
}

// Get retrieves the AntstorSnapshot from the indexer for a given namespace and name.
func (s antstorSnapshotNamespaceLister) Get(name string) (*v1.AntstorSnapshot, error) {
	obj, exists, err := s.indexer.GetByKey(s.namespace + "/" + name)
	if err != nil {
		return nil, err
	}
	if !exists {
		return nil, errors.NewNotFound(v1.Resource("antstorsnapshot"), name)
	}
	return obj.(*v1.AntstorSnapshot), nil
}
