func (ps *ProjectSpec) DeepCopyInto(out *ProjectSpec) {
	*out = *ps
}
to appease k8s
package platform
import (
	"net/http"
	"reflect"
	"time"
	"github.com/nuclio/nuclio/pkg/common"
	"github.com/nuclio/nuclio/pkg/dashboard/auth"
	"github.com/nuclio/nuclio/pkg/functionconfig"
	"github.com/nuclio/nuclio/pkg/opa"
	"github.com/nuclio/nuclio/pkg/platform/kube/ingress"
	"github.com/nuclio/nuclio/pkg/platformconfig"
	"github.com/nuclio/logger"
	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
)
type AuthConfig struct {
	Token string
}
type CreateFunctionBuildOptions struct {
	Logger                     logger.Logger
	FunctionConfig             functionconfig.Config
	PlatformName               string
	OnAfterConfigUpdate        func(*functionconfig.Config) error
	OutputImageFile            string
	DependantImagesRegistryURL string
}
type CreateFunctionOptions struct {
	Logger                     logger.Logger
	FunctionConfig             functionconfig.Config
	CreationStateUpdated       chan bool
	InputImageFile             string
	AuthConfig                 *AuthConfig
	DependantImagesRegistryURL string
	PermissionOptions          opa.PermissionOptions
	AuthSession                auth.Session
}
type UpdateFunctionOptions struct {
	FunctionMeta      *functionconfig.Meta
	FunctionSpec      *functionconfig.Spec
	FunctionStatus    *functionconfig.Status
	AuthConfig        *AuthConfig
	PermissionOptions opa.PermissionOptions
	AuthSession       auth.Session
}
type DeleteFunctionOptions struct {
	FunctionConfig    functionconfig.Config
	AuthConfig        *AuthConfig
	PermissionOptions opa.PermissionOptions
	AuthSession       auth.Session
	IgnoreFunctionStateValidation bool
}
type CreateFunctionBuildResult struct {
	Image string
	UpdatedFunctionConfig functionconfig.Config
}
type CreateFunctionResult struct {
	CreateFunctionBuildResult
	FunctionStatus functionconfig.Status
	Port           int
	ContainerID    string
}
type GetFunctionsOptions struct {
	Name              string
	Namespace         string
	Labels            string
	AuthConfig        *AuthConfig
	PermissionOptions opa.PermissionOptions
	AuthSession       auth.Session
	EnrichWithAPIGateways bool
}
type InvokeViaType int
const (
	InvokeViaAny InvokeViaType = iota
	InvokeViaExternalIP
	InvokeViaLoadBalancer
	InvokeViaDomainName
)
type CreateFunctionInvocationOptions struct {
	Name         string
	Namespace    string
	Path         string
	Method       string
	Body         []byte
	Headers      http.Header
	LogLevelName string
	Timeout      time.Duration
	Via          InvokeViaType
	URL          string
	PermissionOptions opa.PermissionOptions
	AuthSession       auth.Session
}
const FunctionInvocationDefaultTimeout = time.Minute
type CreateFunctionInvocationResult struct {
	Headers    http.Header
	Body       []byte
	StatusCode int
}
type AddressType int
const (
	AddressTypeInternalIP AddressType = iota
	AddressTypeExternalIP
)
type Address struct {
	Address string
	Type    AddressType
}
const DefaultProjectName string = "default"
type ProjectMeta struct {
	Name        string            `json:"name,omitempty"`
	Namespace   string            `json:"namespace,omitempty"`
	Labels      map[string]string `json:"labels,omitempty"`
	Annotations map[string]string `json:"annotations,omitempty"`
	ResourceVersion string `json:"resourceVersion,omitempty"`
}
func (pm ProjectMeta) IsEqual(other ProjectMeta) bool {
	labels := common.GetStringToStringMapOrEmpty(pm.Labels)
	otherLabels := common.GetStringToStringMapOrEmpty(other.Labels)
	annotations := common.GetStringToStringMapOrEmpty(pm.Annotations)
	otherAnnotations := common.GetStringToStringMapOrEmpty(other.Annotations)
	return pm.Name == other.Name &&
		pm.Namespace == other.Namespace &&
		reflect.DeepEqual(labels, otherLabels) &&
		reflect.DeepEqual(annotations, otherAnnotations)
}
type ProjectSpec struct {
	Description string `json:"description,omitempty"`
	Owner       string `json:"owner,omitempty"`
}
func (ps ProjectSpec) IsEqual(other ProjectSpec) bool {
	return ps == other
}
type ProjectStatus struct {
	AdminStatus       string     `json:"adminStatus,omitempty"`
	OperationalStatus string     `json:"operationalStatus,omitempty"`
	UpdatedAt         *time.Time `json:"updatedAt,omitempty"`
}
func (pst ProjectStatus) IsEqual(other ProjectStatus) bool {
	return pst == other
}
type ProjectConfig struct {
	Meta   ProjectMeta   `json:"meta"`
	Spec   ProjectSpec   `json:"spec"`
	Status ProjectStatus `json:"status,omitempty"`
}
func (pc *ProjectConfig) IsEqual(other *ProjectConfig, ignoreStatus bool) bool {
	return pc.Meta.IsEqual(other.Meta) && pc.Spec.IsEqual(other.Spec) && (ignoreStatus || pc.Status.IsEqual(other.Status))
}
func (pc *ProjectConfig) Scrub() {
	pc.Meta.ResourceVersion = ""
}
type CreateProjectOptions struct {
	ProjectConfig           *ProjectConfig
	RequestOrigin           platformconfig.ProjectsLeaderKind
	SessionCookie           *http.Cookie
	PermissionOptions       opa.PermissionOptions
	AuthSession             auth.Session
	WaitForCreateCompletion bool
}
type UpdateProjectOptions struct {
	ProjectConfig     ProjectConfig
	RequestOrigin     platformconfig.ProjectsLeaderKind
	SessionCookie     *http.Cookie
	PermissionOptions opa.PermissionOptions
	AuthSession       auth.Session
}
type DeleteProjectStrategy string
const (
	DeleteProjectStrategyCascading DeleteProjectStrategy = "cascading"
	DeleteProjectStrategyRestricted DeleteProjectStrategy = "restricted"
	DeleteProjectStrategyCheck DeleteProjectStrategy = "check"
)
func ResolveProjectDeletionStrategyOrDefault(projectDeletionStrategy string) DeleteProjectStrategy {
	switch strategy := DeleteProjectStrategy(projectDeletionStrategy); strategy {
	case DeleteProjectStrategyCascading, DeleteProjectStrategyRestricted, DeleteProjectStrategyCheck:
		return strategy
	default:
		return DeleteProjectStrategyRestricted
	}
}
type DeleteProjectOptions struct {
	Meta              ProjectMeta
	Strategy          DeleteProjectStrategy
	RequestOrigin     platformconfig.ProjectsLeaderKind
	SessionCookie     *http.Cookie
	PermissionOptions opa.PermissionOptions
	AuthSession       auth.Session
	WaitForResourcesDeletionCompletion         bool
	WaitForResourcesDeletionCompletionDuration time.Duration
}
type GetProjectsOptions struct {
	Meta              ProjectMeta
	PermissionOptions opa.PermissionOptions
	RequestOrigin     platformconfig.ProjectsLeaderKind
	SessionCookie     *http.Cookie
	AuthSession       auth.Session
}