/*
Copyright AppsCode Inc. and Contributors

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 "kubedb.dev/apimachinery/apis/kubedb/v1"

	"k8s.io/apimachinery/pkg/api/errors"
	"k8s.io/apimachinery/pkg/labels"
	"k8s.io/client-go/tools/cache"
)

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

// perconaXtraDBLister implements the PerconaXtraDBLister interface.
type perconaXtraDBLister struct {
	indexer cache.Indexer
}

// NewPerconaXtraDBLister returns a new PerconaXtraDBLister.
func NewPerconaXtraDBLister(indexer cache.Indexer) PerconaXtraDBLister {
	return &perconaXtraDBLister{indexer: indexer}
}

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

// PerconaXtraDBs returns an object that can list and get PerconaXtraDBs.
func (s *perconaXtraDBLister) PerconaXtraDBs(namespace string) PerconaXtraDBNamespaceLister {
	return perconaXtraDBNamespaceLister{indexer: s.indexer, namespace: namespace}
}

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

// perconaXtraDBNamespaceLister implements the PerconaXtraDBNamespaceLister
// interface.
type perconaXtraDBNamespaceLister struct {
	indexer   cache.Indexer
	namespace string
}

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

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