github.com/mutagen-io/mutagen@v0.18.0-rc1/pkg/service/forwarding/server.go (about)

     1  package forwarding
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  
     7  	"github.com/mutagen-io/mutagen/pkg/forwarding"
     8  )
     9  
    10  // Server provides an implementation of the Forwarding service.
    11  type Server struct {
    12  	// UnimplementedForwardingServer is the required base implementation.
    13  	UnimplementedForwardingServer
    14  	// manager is the underlying session manager.
    15  	manager *forwarding.Manager
    16  }
    17  
    18  // NewServer creates a new session server.
    19  func NewServer(manager *forwarding.Manager) *Server {
    20  	return &Server{
    21  		manager: manager,
    22  	}
    23  }
    24  
    25  // Create creates a new session.
    26  func (s *Server) Create(ctx context.Context, request *CreateRequest) (*CreateResponse, error) {
    27  	// Validate the request.
    28  	if err := request.ensureValid(); err != nil {
    29  		return nil, fmt.Errorf("invalid create request: %w", err)
    30  	}
    31  
    32  	// Perform creation.
    33  	session, err := s.manager.Create(
    34  		ctx,
    35  		request.Specification.Source,
    36  		request.Specification.Destination,
    37  		request.Specification.Configuration,
    38  		request.Specification.ConfigurationSource,
    39  		request.Specification.ConfigurationDestination,
    40  		request.Specification.Name,
    41  		request.Specification.Labels,
    42  		request.Specification.Paused,
    43  		request.Prompter,
    44  	)
    45  	if err != nil {
    46  		return nil, err
    47  	}
    48  
    49  	// Success.
    50  	return &CreateResponse{Session: session}, nil
    51  }
    52  
    53  // List lists existing sessions.
    54  func (s *Server) List(ctx context.Context, request *ListRequest) (*ListResponse, error) {
    55  	// Validate the request.
    56  	if err := request.ensureValid(); err != nil {
    57  		return nil, fmt.Errorf("invalid list request: %w", err)
    58  	}
    59  
    60  	// Perform listing.
    61  	stateIndex, states, err := s.manager.List(ctx, request.Selection, request.PreviousStateIndex)
    62  	if err != nil {
    63  		return nil, err
    64  	}
    65  
    66  	// Success.
    67  	return &ListResponse{
    68  		StateIndex:    stateIndex,
    69  		SessionStates: states,
    70  	}, nil
    71  }
    72  
    73  // Pause pauses existing sessions.
    74  func (s *Server) Pause(ctx context.Context, request *PauseRequest) (*PauseResponse, error) {
    75  	// Validate the request.
    76  	if err := request.ensureValid(); err != nil {
    77  		return nil, fmt.Errorf("invalid pause request: %w", err)
    78  	}
    79  
    80  	// Perform pausing.
    81  	if err := s.manager.Pause(ctx, request.Selection, request.Prompter); err != nil {
    82  		return nil, err
    83  	}
    84  
    85  	// Success.
    86  	return &PauseResponse{}, nil
    87  }
    88  
    89  // Resume resumes existing sessions.
    90  func (s *Server) Resume(ctx context.Context, request *ResumeRequest) (*ResumeResponse, error) {
    91  	// Validate the request.
    92  	if err := request.ensureValid(); err != nil {
    93  		return nil, fmt.Errorf("invalid resume request: %w", err)
    94  	}
    95  
    96  	// Perform resuming.
    97  	if err := s.manager.Resume(ctx, request.Selection, request.Prompter); err != nil {
    98  		return nil, err
    99  	}
   100  
   101  	// Success.
   102  	return &ResumeResponse{}, nil
   103  }
   104  
   105  // Terminate terminates existing sessions.
   106  func (s *Server) Terminate(ctx context.Context, request *TerminateRequest) (*TerminateResponse, error) {
   107  	// Validate the request.
   108  	if err := request.ensureValid(); err != nil {
   109  		return nil, fmt.Errorf("invalid terminate request: %w", err)
   110  	}
   111  
   112  	// Perform termination.
   113  	if err := s.manager.Terminate(ctx, request.Selection, request.Prompter); err != nil {
   114  		return nil, err
   115  	}
   116  
   117  	// Success.
   118  	return &TerminateResponse{}, nil
   119  }