// Code generated by protoc-gen-go-grpc. DO NOT EDIT.

package google_security_meshca_v1

import (
	context "context"
	grpc "google.golang.org/grpc"
	codes "google.golang.org/grpc/codes"
	status "google.golang.org/grpc/status"
)

// This is a compile-time assertion to ensure that this generated file
// is compatible with the grpc package it is being compiled against.
const _ = grpc.SupportPackageIsVersion7

// MeshCertificateServiceService is the service API for MeshCertificateService service.
// Fields should be assigned to their respective handler implementations only before
// RegisterMeshCertificateServiceService is called.  Any unassigned fields will result in the
// handler for that method returning an Unimplemented error.
type MeshCertificateServiceService struct {
	// Using provided CSR, returns a signed certificate that represents a GCP
	// service account identity.
	CreateCertificate func(context.Context, *MeshCertificateRequest) (*MeshCertificateResponse, error)
}

func (s *MeshCertificateServiceService) createCertificate(_ interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
	if s.CreateCertificate == nil {
		return nil, status.Errorf(codes.Unimplemented, "method CreateCertificate not implemented")
	}
	in := new(MeshCertificateRequest)
	if err := dec(in); err != nil {
		return nil, err
	}
	if interceptor == nil {
		return s.CreateCertificate(ctx, in)
	}
	info := &grpc.UnaryServerInfo{
		Server:     s,
		FullMethod: "/google.security.meshca.v1.MeshCertificateService/CreateCertificate",
	}
	handler := func(ctx context.Context, req interface{}) (interface{}, error) {
		return s.CreateCertificate(ctx, req.(*MeshCertificateRequest))
	}
	return interceptor(ctx, in, info, handler)
}

// RegisterMeshCertificateServiceService registers a service implementation with a gRPC server.
func RegisterMeshCertificateServiceService(s grpc.ServiceRegistrar, srv *MeshCertificateServiceService) {
	sd := grpc.ServiceDesc{
		ServiceName: "google.security.meshca.v1.MeshCertificateService",
		Methods: []grpc.MethodDesc{
			{
				MethodName: "CreateCertificate",
				Handler:    srv.createCertificate,
			},
		},
		Streams:  []grpc.StreamDesc{},
		Metadata: "istio/google/security/meshca/v1/meshca.proto",
	}

	s.RegisterService(&sd, nil)
}

// NewMeshCertificateServiceService creates a new MeshCertificateServiceService containing the
// implemented methods of the MeshCertificateService service in s.  Any unimplemented
// methods will result in the gRPC server returning an UNIMPLEMENTED status to the client.
// This includes situations where the method handler is misspelled or has the wrong
// signature.  For this reason, this function should be used with great care and
// is not recommended to be used by most users.
func NewMeshCertificateServiceService(s interface{}) *MeshCertificateServiceService {
	ns := &MeshCertificateServiceService{}
	if h, ok := s.(interface {
		CreateCertificate(context.Context, *MeshCertificateRequest) (*MeshCertificateResponse, error)
	}); ok {
		ns.CreateCertificate = h.CreateCertificate
	}
	return ns
}

// UnstableMeshCertificateServiceService is the service API for MeshCertificateService service.
// New methods may be added to this interface if they are added to the service
// definition, which is not a backward-compatible change.  For this reason,
// use of this type is not recommended.
type UnstableMeshCertificateServiceService interface {
	// Using provided CSR, returns a signed certificate that represents a GCP
	// service account identity.
	CreateCertificate(context.Context, *MeshCertificateRequest) (*MeshCertificateResponse, error)
}
