// Code generated by protoc-gen-psrpc v0.7.0, DO NOT EDIT.
// source: rpc/connector.proto

package rpc

import (
	"context"

	"github.com/livekit/psrpc"
	"github.com/livekit/psrpc/pkg/client"
	"github.com/livekit/psrpc/pkg/info"
	"github.com/livekit/psrpc/pkg/rand"
	"github.com/livekit/psrpc/pkg/server"
	"github.com/livekit/psrpc/version"
)
import livekit10 "github.com/livekit/protocol/livekit"
import livekit11 "github.com/livekit/protocol/livekit"

var _ = version.PsrpcVersion_0_7

// ==================================
// ConnectorInternal Client Interface
// ==================================

type ConnectorInternalClient interface {
	DialWhatsAppCall(ctx context.Context, topic string, req *InternalDialWhatsAppCallRequest, opts ...psrpc.RequestOption) (*livekit10.DialWhatsAppCallResponse, error)

	AcceptWhatsAppCall(ctx context.Context, topic string, req *InternalAcceptWhatsAppCallRequest, opts ...psrpc.RequestOption) (*livekit10.AcceptWhatsAppCallResponse, error)

	ConnectTwilioCall(ctx context.Context, topic string, req *InternalConnectTwilioCallRequest, opts ...psrpc.RequestOption) (*livekit11.ConnectTwilioCallResponse, error)

	// Close immediately, without waiting for pending RPCs
	Close()
}

// ======================================
// ConnectorInternal ServerImpl Interface
// ======================================

type ConnectorInternalServerImpl interface {
	DialWhatsAppCall(context.Context, *InternalDialWhatsAppCallRequest) (*livekit10.DialWhatsAppCallResponse, error)

	AcceptWhatsAppCall(context.Context, *InternalAcceptWhatsAppCallRequest) (*livekit10.AcceptWhatsAppCallResponse, error)

	ConnectTwilioCall(context.Context, *InternalConnectTwilioCallRequest) (*livekit11.ConnectTwilioCallResponse, error)
}

// ==================================
// ConnectorInternal Server Interface
// ==================================

type ConnectorInternalServer interface {
	RegisterDialWhatsAppCallTopic(topic string) error
	DeregisterDialWhatsAppCallTopic(topic string)
	RegisterAcceptWhatsAppCallTopic(topic string) error
	DeregisterAcceptWhatsAppCallTopic(topic string)
	RegisterConnectTwilioCallTopic(topic string) error
	DeregisterConnectTwilioCallTopic(topic string)

	// Close and wait for pending RPCs to complete
	Shutdown()

	// Close immediately, without waiting for pending RPCs
	Kill()
}

// ========================
// ConnectorInternal Client
// ========================

type connectorInternalClient struct {
	client *client.RPCClient
}

// NewConnectorInternalClient creates a psrpc client that implements the ConnectorInternalClient interface.
func NewConnectorInternalClient(bus psrpc.MessageBus, opts ...psrpc.ClientOption) (ConnectorInternalClient, error) {
	sd := &info.ServiceDefinition{
		Name: "ConnectorInternal",
		ID:   rand.NewClientID(),
	}

	sd.RegisterMethod("DialWhatsAppCall", false, false, true, true)
	sd.RegisterMethod("AcceptWhatsAppCall", false, false, true, true)
	sd.RegisterMethod("ConnectTwilioCall", false, false, true, true)

	rpcClient, err := client.NewRPCClient(sd, bus, opts...)
	if err != nil {
		return nil, err
	}

	return &connectorInternalClient{
		client: rpcClient,
	}, nil
}

func (c *connectorInternalClient) DialWhatsAppCall(ctx context.Context, topic string, req *InternalDialWhatsAppCallRequest, opts ...psrpc.RequestOption) (*livekit10.DialWhatsAppCallResponse, error) {
	return client.RequestSingle[*livekit10.DialWhatsAppCallResponse](ctx, c.client, "DialWhatsAppCall", []string{topic}, req, opts...)
}

func (c *connectorInternalClient) AcceptWhatsAppCall(ctx context.Context, topic string, req *InternalAcceptWhatsAppCallRequest, opts ...psrpc.RequestOption) (*livekit10.AcceptWhatsAppCallResponse, error) {
	return client.RequestSingle[*livekit10.AcceptWhatsAppCallResponse](ctx, c.client, "AcceptWhatsAppCall", []string{topic}, req, opts...)
}

func (c *connectorInternalClient) ConnectTwilioCall(ctx context.Context, topic string, req *InternalConnectTwilioCallRequest, opts ...psrpc.RequestOption) (*livekit11.ConnectTwilioCallResponse, error) {
	return client.RequestSingle[*livekit11.ConnectTwilioCallResponse](ctx, c.client, "ConnectTwilioCall", []string{topic}, req, opts...)
}

func (s *connectorInternalClient) Close() {
	s.client.Close()
}

// ========================
// ConnectorInternal Server
// ========================

type connectorInternalServer struct {
	svc ConnectorInternalServerImpl
	rpc *server.RPCServer
}

// NewConnectorInternalServer builds a RPCServer that will route requests
// to the corresponding method in the provided svc implementation.
func NewConnectorInternalServer(svc ConnectorInternalServerImpl, bus psrpc.MessageBus, opts ...psrpc.ServerOption) (ConnectorInternalServer, error) {
	sd := &info.ServiceDefinition{
		Name: "ConnectorInternal",
		ID:   rand.NewServerID(),
	}

	s := server.NewRPCServer(sd, bus, opts...)

	sd.RegisterMethod("DialWhatsAppCall", false, false, true, true)
	sd.RegisterMethod("AcceptWhatsAppCall", false, false, true, true)
	sd.RegisterMethod("ConnectTwilioCall", false, false, true, true)
	return &connectorInternalServer{
		svc: svc,
		rpc: s,
	}, nil
}

func (s *connectorInternalServer) RegisterDialWhatsAppCallTopic(topic string) error {
	return server.RegisterHandler(s.rpc, "DialWhatsAppCall", []string{topic}, s.svc.DialWhatsAppCall, nil)
}

func (s *connectorInternalServer) DeregisterDialWhatsAppCallTopic(topic string) {
	s.rpc.DeregisterHandler("DialWhatsAppCall", []string{topic})
}

func (s *connectorInternalServer) RegisterAcceptWhatsAppCallTopic(topic string) error {
	return server.RegisterHandler(s.rpc, "AcceptWhatsAppCall", []string{topic}, s.svc.AcceptWhatsAppCall, nil)
}

func (s *connectorInternalServer) DeregisterAcceptWhatsAppCallTopic(topic string) {
	s.rpc.DeregisterHandler("AcceptWhatsAppCall", []string{topic})
}

func (s *connectorInternalServer) RegisterConnectTwilioCallTopic(topic string) error {
	return server.RegisterHandler(s.rpc, "ConnectTwilioCall", []string{topic}, s.svc.ConnectTwilioCall, nil)
}

func (s *connectorInternalServer) DeregisterConnectTwilioCallTopic(topic string) {
	s.rpc.DeregisterHandler("ConnectTwilioCall", []string{topic})
}

func (s *connectorInternalServer) Shutdown() {
	s.rpc.Close(false)
}

func (s *connectorInternalServer) Kill() {
	s.rpc.Close(true)
}

// ======================================
// ConnectorInternal Unimplemented Server
// ======================================

type UnimplementedConnectorInternalServer struct{}

func (UnimplementedConnectorInternalServer) DialWhatsAppCall(context.Context, *InternalDialWhatsAppCallRequest) (*livekit10.DialWhatsAppCallResponse, error) {
	return nil, psrpc.ErrUnimplemented
}

func (UnimplementedConnectorInternalServer) AcceptWhatsAppCall(context.Context, *InternalAcceptWhatsAppCallRequest) (*livekit10.AcceptWhatsAppCallResponse, error) {
	return nil, psrpc.ErrUnimplemented
}

func (UnimplementedConnectorInternalServer) ConnectTwilioCall(context.Context, *InternalConnectTwilioCallRequest) (*livekit11.ConnectTwilioCallResponse, error) {
	return nil, psrpc.ErrUnimplemented
}

// =================================
// ConnectorHandler Client Interface
// =================================

type ConnectorHandlerClient interface {
	ConnectWhatsAppCall(ctx context.Context, whatsappCallId string, req *livekit10.ConnectWhatsAppCallRequest, opts ...psrpc.RequestOption) (*livekit10.ConnectWhatsAppCallResponse, error)

	DisconnectWhatsAppCall(ctx context.Context, whatsappCallId string, req *livekit10.DisconnectWhatsAppCallRequest, opts ...psrpc.RequestOption) (*livekit10.DisconnectWhatsAppCallResponse, error)

	// Close immediately, without waiting for pending RPCs
	Close()
}

// =====================================
// ConnectorHandler ServerImpl Interface
// =====================================

type ConnectorHandlerServerImpl interface {
	ConnectWhatsAppCall(context.Context, *livekit10.ConnectWhatsAppCallRequest) (*livekit10.ConnectWhatsAppCallResponse, error)

	DisconnectWhatsAppCall(context.Context, *livekit10.DisconnectWhatsAppCallRequest) (*livekit10.DisconnectWhatsAppCallResponse, error)
}

// =================================
// ConnectorHandler Server Interface
// =================================

type ConnectorHandlerServer interface {
	RegisterConnectWhatsAppCallTopic(whatsappCallId string) error
	DeregisterConnectWhatsAppCallTopic(whatsappCallId string)
	RegisterDisconnectWhatsAppCallTopic(whatsappCallId string) error
	DeregisterDisconnectWhatsAppCallTopic(whatsappCallId string)

	// Close and wait for pending RPCs to complete
	Shutdown()

	// Close immediately, without waiting for pending RPCs
	Kill()
}

// =======================
// ConnectorHandler Client
// =======================

type connectorHandlerClient struct {
	client *client.RPCClient
}

// NewConnectorHandlerClient creates a psrpc client that implements the ConnectorHandlerClient interface.
func NewConnectorHandlerClient(bus psrpc.MessageBus, opts ...psrpc.ClientOption) (ConnectorHandlerClient, error) {
	sd := &info.ServiceDefinition{
		Name: "ConnectorHandler",
		ID:   rand.NewClientID(),
	}

	sd.RegisterMethod("ConnectWhatsAppCall", false, false, true, true)
	sd.RegisterMethod("DisconnectWhatsAppCall", false, false, true, true)

	rpcClient, err := client.NewRPCClient(sd, bus, opts...)
	if err != nil {
		return nil, err
	}

	return &connectorHandlerClient{
		client: rpcClient,
	}, nil
}

func (c *connectorHandlerClient) ConnectWhatsAppCall(ctx context.Context, whatsappCallId string, req *livekit10.ConnectWhatsAppCallRequest, opts ...psrpc.RequestOption) (*livekit10.ConnectWhatsAppCallResponse, error) {
	return client.RequestSingle[*livekit10.ConnectWhatsAppCallResponse](ctx, c.client, "ConnectWhatsAppCall", []string{whatsappCallId}, req, opts...)
}

func (c *connectorHandlerClient) DisconnectWhatsAppCall(ctx context.Context, whatsappCallId string, req *livekit10.DisconnectWhatsAppCallRequest, opts ...psrpc.RequestOption) (*livekit10.DisconnectWhatsAppCallResponse, error) {
	return client.RequestSingle[*livekit10.DisconnectWhatsAppCallResponse](ctx, c.client, "DisconnectWhatsAppCall", []string{whatsappCallId}, req, opts...)
}

func (s *connectorHandlerClient) Close() {
	s.client.Close()
}

// =======================
// ConnectorHandler Server
// =======================

type connectorHandlerServer struct {
	svc ConnectorHandlerServerImpl
	rpc *server.RPCServer
}

// NewConnectorHandlerServer builds a RPCServer that will route requests
// to the corresponding method in the provided svc implementation.
func NewConnectorHandlerServer(svc ConnectorHandlerServerImpl, bus psrpc.MessageBus, opts ...psrpc.ServerOption) (ConnectorHandlerServer, error) {
	sd := &info.ServiceDefinition{
		Name: "ConnectorHandler",
		ID:   rand.NewServerID(),
	}

	s := server.NewRPCServer(sd, bus, opts...)

	sd.RegisterMethod("ConnectWhatsAppCall", false, false, true, true)
	sd.RegisterMethod("DisconnectWhatsAppCall", false, false, true, true)
	return &connectorHandlerServer{
		svc: svc,
		rpc: s,
	}, nil
}

func (s *connectorHandlerServer) RegisterConnectWhatsAppCallTopic(whatsappCallId string) error {
	return server.RegisterHandler(s.rpc, "ConnectWhatsAppCall", []string{whatsappCallId}, s.svc.ConnectWhatsAppCall, nil)
}

func (s *connectorHandlerServer) DeregisterConnectWhatsAppCallTopic(whatsappCallId string) {
	s.rpc.DeregisterHandler("ConnectWhatsAppCall", []string{whatsappCallId})
}

func (s *connectorHandlerServer) RegisterDisconnectWhatsAppCallTopic(whatsappCallId string) error {
	return server.RegisterHandler(s.rpc, "DisconnectWhatsAppCall", []string{whatsappCallId}, s.svc.DisconnectWhatsAppCall, nil)
}

func (s *connectorHandlerServer) DeregisterDisconnectWhatsAppCallTopic(whatsappCallId string) {
	s.rpc.DeregisterHandler("DisconnectWhatsAppCall", []string{whatsappCallId})
}

func (s *connectorHandlerServer) Shutdown() {
	s.rpc.Close(false)
}

func (s *connectorHandlerServer) Kill() {
	s.rpc.Close(true)
}

// =====================================
// ConnectorHandler Unimplemented Server
// =====================================

type UnimplementedConnectorHandlerServer struct{}

func (UnimplementedConnectorHandlerServer) ConnectWhatsAppCall(context.Context, *livekit10.ConnectWhatsAppCallRequest) (*livekit10.ConnectWhatsAppCallResponse, error) {
	return nil, psrpc.ErrUnimplemented
}

func (UnimplementedConnectorHandlerServer) DisconnectWhatsAppCall(context.Context, *livekit10.DisconnectWhatsAppCallRequest) (*livekit10.DisconnectWhatsAppCallResponse, error) {
	return nil, psrpc.ErrUnimplemented
}

var psrpcFileDescriptor12 = []byte{
	// 444 bytes of a gzipped FileDescriptorProto
	0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xac, 0x94, 0x4f, 0x8f, 0x94, 0x30,
	0x18, 0xc6, 0x53, 0x4c, 0xd6, 0xa4, 0xfe, 0x09, 0x76, 0x93, 0xcd, 0xca, 0xc1, 0x05, 0x76, 0x5d,
	0x3d, 0x41, 0x32, 0xde, 0xd4, 0xc4, 0xac, 0xb3, 0x07, 0xd7, 0x23, 0x31, 0x31, 0xf1, 0x42, 0xd8,
	0x6e, 0xc7, 0xa9, 0x96, 0xbe, 0xb5, 0x74, 0x9c, 0x8b, 0x57, 0x0f, 0xf3, 0x0d, 0x3c, 0x19, 0xe3,
	0x47, 0x98, 0xaf, 0xe1, 0x97, 0x32, 0x02, 0xc5, 0x81, 0x01, 0xe6, 0x32, 0x37, 0x5a, 0x9e, 0xf7,
	0x7d, 0x7e, 0x7d, 0x9f, 0x02, 0x3e, 0xd4, 0x8a, 0xc6, 0x14, 0xa4, 0x64, 0xd4, 0x80, 0x8e, 0x94,
	0x06, 0x03, 0xe4, 0x96, 0x56, 0xd4, 0xbb, 0x07, 0xca, 0x70, 0x90, 0x45, 0xb5, 0xe7, 0xf9, 0x82,
	0x7f, 0x65, 0x9f, 0xb9, 0x49, 0x1b, 0x71, 0xba, 0x9c, 0x67, 0xa6, 0xc8, 0x94, 0xaa, 0x15, 0x8f,
	0xb6, 0x15, 0x66, 0xc9, 0x05, 0x87, 0xfa, 0xbd, 0x5b, 0x59, 0xe5, 0x39, 0xc8, 0x6a, 0x27, 0xfc,
	0x89, 0xf0, 0xc9, 0x95, 0x34, 0x4c, 0xcb, 0x4c, 0x5c, 0xf2, 0x4c, 0xbc, 0xff, 0xd7, 0xf0, 0x42,
	0xa9, 0x69, 0x26, 0x44, 0xc2, 0xbe, 0x2c, 0x58, 0x61, 0xc8, 0x73, 0x7c, 0x5b, 0x57, 0x8f, 0xc7,
	0xc8, 0x47, 0x4f, 0xef, 0x4c, 0xfc, 0xa8, 0xf6, 0x89, 0x06, 0x4a, 0x12, 0x5b, 0x40, 0x5e, 0xe1,
	0xfb, 0x1a, 0x20, 0x4f, 0x3f, 0x01, 0x97, 0x29, 0x97, 0x33, 0x38, 0x76, 0xca, 0x16, 0x0f, 0x23,
	0xad, 0x68, 0x64, 0x9d, 0x13, 0x80, 0xfc, 0x2d, 0x70, 0x79, 0x25, 0x67, 0x90, 0xdc, 0xd5, 0x1b,
	0xab, 0xf0, 0x37, 0xc2, 0x81, 0x95, 0x5d, 0x50, 0xca, 0x94, 0xe9, 0x43, 0x7c, 0xd9, 0x45, 0x0c,
	0x1b, 0xc4, 0xc1, 0xa2, 0x3d, 0x42, 0xfe, 0x42, 0xd8, 0xb7, 0xb2, 0x69, 0x35, 0xfa, 0x77, 0xe5,
	0xdc, 0x37, 0x19, 0x5f, 0x74, 0x19, 0x83, 0x86, 0x71, 0xa8, 0x66, 0x7f, 0x88, 0x93, 0x3f, 0x0e,
	0x7e, 0x30, 0xb5, 0xb7, 0xc2, 0xea, 0x09, 0xc5, 0x6e, 0x37, 0x42, 0x72, 0xd6, 0x6a, 0x39, 0x90,
	0xb0, 0x17, 0x8c, 0xdc, 0x81, 0x42, 0x81, 0x2c, 0x58, 0x78, 0xb0, 0x5e, 0x21, 0xc7, 0x45, 0x84,
	0x63, 0xb2, 0x1d, 0x02, 0x39, 0x6f, 0xd9, 0x0c, 0xa6, 0xe4, 0x9d, 0x8e, 0x26, 0xd9, 0xb1, 0x9a,
	0x35, 0x87, 0xfc, 0x3f, 0x4b, 0xf2, 0xb8, 0xe5, 0x34, 0x34, 0x6b, 0x2f, 0x1c, 0x8b, 0xa3, 0xed,
	0x33, 0xf9, 0xe1, 0x60, 0xb7, 0x99, 0xe6, 0x9b, 0x4c, 0xde, 0x08, 0xa6, 0xc9, 0x37, 0x7c, 0x58,
	0xef, 0xb5, 0x0e, 0x7a, 0xda, 0xed, 0xdb, 0x77, 0xca, 0xb3, 0x71, 0x51, 0x6d, 0xef, 0xad, 0x57,
	0xe8, 0xc8, 0x45, 0x1e, 0x21, 0xae, 0xfd, 0xf2, 0x53, 0x9a, 0x09, 0x91, 0xf2, 0x1b, 0xf2, 0x1d,
	0xe1, 0xa3, 0x4b, 0x5e, 0xd0, 0x1e, 0x82, 0xf3, 0x8d, 0xac, 0xfa, 0x04, 0x16, 0xe2, 0xc9, 0x4e,
	0xdd, 0x6e, 0x8e, 0xd7, 0xc1, 0x87, 0x93, 0x8f, 0xdc, 0xcc, 0x17, 0xd7, 0x11, 0x85, 0x3c, 0xae,
	0x1b, 0xc6, 0xe5, 0xdf, 0x86, 0x82, 0x88, 0xb5, 0xa2, 0xd7, 0x07, 0xe5, 0xea, 0xd9, 0xdf, 0x00,
	0x00, 0x00, 0xff, 0xff, 0x7b, 0xb1, 0x7d, 0x3e, 0xfa, 0x04, 0x00, 0x00,
}
