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

     1  package synchronization
     2  
     3  import (
     4  	"errors"
     5  	"fmt"
     6  
     7  	"github.com/mutagen-io/mutagen/pkg/selection"
     8  	"github.com/mutagen-io/mutagen/pkg/url"
     9  )
    10  
    11  // ensureValid verifies that a CreationSpecification is valid.
    12  func (s *CreationSpecification) ensureValid() error {
    13  	// A nil creation specification is not valid.
    14  	if s == nil {
    15  		return errors.New("nil creation specification")
    16  	}
    17  
    18  	// Verify that the alpha URL is valid and is a synchronization URL.
    19  	if err := s.Alpha.EnsureValid(); err != nil {
    20  		return fmt.Errorf("invalid alpha URL: %w", err)
    21  	} else if s.Alpha.Kind != url.Kind_Synchronization {
    22  		return errors.New("alpha URL is not a synchronization URL")
    23  	}
    24  
    25  	// Verify that the beta URL is valid and is a synchronization URL.
    26  	if err := s.Beta.EnsureValid(); err != nil {
    27  		return fmt.Errorf("invalid beta URL: %w", err)
    28  	} else if s.Beta.Kind != url.Kind_Synchronization {
    29  		return errors.New("beta URL is not a synchronization URL")
    30  	}
    31  
    32  	// Verify that the configuration is valid.
    33  	if err := s.Configuration.EnsureValid(false); err != nil {
    34  		return fmt.Errorf("invalid session configuration: %w", err)
    35  	}
    36  
    37  	// Verify that the alpha-specific configuration is valid.
    38  	if err := s.ConfigurationAlpha.EnsureValid(true); err != nil {
    39  		return fmt.Errorf("invalid alpha-specific configuration: %w", err)
    40  	}
    41  
    42  	// Verify that the beta-specific configuration is valid.
    43  	if err := s.ConfigurationBeta.EnsureValid(true); err != nil {
    44  		return fmt.Errorf("invalid beta-specific configuration: %w", err)
    45  	}
    46  
    47  	// Verify that the name is valid.
    48  	if err := selection.EnsureNameValid(s.Name); err != nil {
    49  		return fmt.Errorf("invalid name: %w", err)
    50  	}
    51  
    52  	// Verify that labels are valid.
    53  	for k, v := range s.Labels {
    54  		if err := selection.EnsureLabelKeyValid(k); err != nil {
    55  			return fmt.Errorf("invalid label key: %w", err)
    56  		} else if err = selection.EnsureLabelValueValid(v); err != nil {
    57  			return fmt.Errorf("invalid label value: %w", err)
    58  		}
    59  	}
    60  
    61  	// There's no need to validate the Paused field - either value is valid.
    62  
    63  	// Success.
    64  	return nil
    65  }
    66  
    67  // ensureValid verifies that a CreateRequest is valid.
    68  func (r *CreateRequest) ensureValid() error {
    69  	// A nil create request is not valid.
    70  	if r == nil {
    71  		return errors.New("nil create request")
    72  	}
    73  
    74  	// Ensure that a prompter has been specified.
    75  	if r.Prompter == "" {
    76  		return errors.New("no prompter specified")
    77  	}
    78  
    79  	// Ensure that the creation specification is valid.
    80  	if err := r.Specification.ensureValid(); err != nil {
    81  		return fmt.Errorf("invalid creation specification: %w", err)
    82  	}
    83  
    84  	// Success.
    85  	return nil
    86  }
    87  
    88  // EnsureValid verifies that a CreateResponse is valid.
    89  func (r *CreateResponse) EnsureValid() error {
    90  	// A nil create response is not valid.
    91  	if r == nil {
    92  		return errors.New("nil create response")
    93  	}
    94  
    95  	// Ensure that the session identifier is non-empty.
    96  	if r.Session == "" {
    97  		return errors.New("empty session identifier")
    98  	}
    99  
   100  	// Success.
   101  	return nil
   102  }
   103  
   104  // ensureValid verifies that a ListRequest is valid.
   105  func (r *ListRequest) ensureValid() error {
   106  	// A nil list request is not valid.
   107  	if r == nil {
   108  		return errors.New("nil list request")
   109  	}
   110  
   111  	// Validate the session specification.
   112  	if err := r.Selection.EnsureValid(); err != nil {
   113  		return fmt.Errorf("invalid selection specification: %w", err)
   114  	}
   115  
   116  	// There's no need to validate the state index - any value is valid.
   117  
   118  	// Success.
   119  	return nil
   120  }
   121  
   122  // EnsureValid verifies that a ListResponse is valid.
   123  func (r *ListResponse) EnsureValid() error {
   124  	// A nil list response is not valid.
   125  	if r == nil {
   126  		return errors.New("nil list response")
   127  	}
   128  
   129  	// Ensure that all states are valid.
   130  	for _, s := range r.SessionStates {
   131  		if err := s.EnsureValid(); err != nil {
   132  			return fmt.Errorf("invalid session state: %w", err)
   133  		}
   134  	}
   135  
   136  	// Success.
   137  	return nil
   138  }
   139  
   140  // ensureValid verifies that a FlushRequest is valid.
   141  func (r *FlushRequest) ensureValid() error {
   142  	// A nil flush request is not valid.
   143  	if r == nil {
   144  		return errors.New("nil flush request")
   145  	}
   146  
   147  	// Ensure that a prompter has been specified.
   148  	if r.Prompter == "" {
   149  		return errors.New("no prompter specified")
   150  	}
   151  
   152  	// Ensure that the session selection is valid.
   153  	if err := r.Selection.EnsureValid(); err != nil {
   154  		return fmt.Errorf("invalid selection specification: %w", err)
   155  	}
   156  
   157  	// Any value of SkipWait is considered valid.
   158  
   159  	// Success.
   160  	return nil
   161  }
   162  
   163  // EnsureValid verifies that a FlushResponse is valid.
   164  func (r *FlushResponse) EnsureValid() error {
   165  	// A nil flush response is not valid.
   166  	if r == nil {
   167  		return errors.New("nil flush response")
   168  	}
   169  
   170  	// Success.
   171  	return nil
   172  }
   173  
   174  // ensureValid verifies that a PauseRequest is valid.
   175  func (r *PauseRequest) ensureValid() error {
   176  	// A nil pause request is not valid.
   177  	if r == nil {
   178  		return errors.New("nil pause request")
   179  	}
   180  
   181  	// Ensure that a prompter has been specified.
   182  	if r.Prompter == "" {
   183  		return errors.New("no prompter specified")
   184  	}
   185  
   186  	// Ensure that the session selection is valid.
   187  	if err := r.Selection.EnsureValid(); err != nil {
   188  		return fmt.Errorf("invalid selection specification: %w", err)
   189  	}
   190  
   191  	// Success.
   192  	return nil
   193  }
   194  
   195  // EnsureValid verifies that a PauseResponse is valid.
   196  func (r *PauseResponse) EnsureValid() error {
   197  	// A nil pause response is not valid.
   198  	if r == nil {
   199  		return errors.New("nil pause response")
   200  	}
   201  
   202  	// Success.
   203  	return nil
   204  }
   205  
   206  // ensureValid verifies that a ResumeRequest is valid.
   207  func (r *ResumeRequest) ensureValid() error {
   208  	// A nil resume request is not valid.
   209  	if r == nil {
   210  		return errors.New("nil resume request")
   211  	}
   212  
   213  	// Ensure that a prompter has been specified.
   214  	if r.Prompter == "" {
   215  		return errors.New("no prompter specified")
   216  	}
   217  
   218  	// Ensure that the session selection is valid.
   219  	if err := r.Selection.EnsureValid(); err != nil {
   220  		return fmt.Errorf("invalid selection specification: %w", err)
   221  	}
   222  
   223  	// Success.
   224  	return nil
   225  }
   226  
   227  // EnsureValid verifies that a ResumeResponse is valid.
   228  func (r *ResumeResponse) EnsureValid() error {
   229  	// A nil resume response is not valid.
   230  	if r == nil {
   231  		return errors.New("nil resume response")
   232  	}
   233  
   234  	// Success.
   235  	return nil
   236  }
   237  
   238  // ensureValid verifies that a ResetRequest is valid.
   239  func (r *ResetRequest) ensureValid() error {
   240  	// A nil reset request is not valid.
   241  	if r == nil {
   242  		return errors.New("nil reset request")
   243  	}
   244  
   245  	// Ensure that a prompter has been specified.
   246  	if r.Prompter == "" {
   247  		return errors.New("no prompter specified")
   248  	}
   249  
   250  	// Ensure that the session selection is valid.
   251  	if err := r.Selection.EnsureValid(); err != nil {
   252  		return fmt.Errorf("invalid selection specification: %w", err)
   253  	}
   254  
   255  	// Success.
   256  	return nil
   257  }
   258  
   259  // EnsureValid verifies that a ResetResponse is valid.
   260  func (r *ResetResponse) EnsureValid() error {
   261  	// A nil reset response is not valid.
   262  	if r == nil {
   263  		return errors.New("nil reset response")
   264  	}
   265  
   266  	// Success.
   267  	return nil
   268  }
   269  
   270  // ensureValid verifies that a TerminateRequest is valid.
   271  func (r *TerminateRequest) ensureValid() error {
   272  	// A nil terminate request is not valid.
   273  	if r == nil {
   274  		return errors.New("nil terminate request")
   275  	}
   276  
   277  	// Ensure that a prompter has been specified.
   278  	if r.Prompter == "" {
   279  		return errors.New("no prompter specified")
   280  	}
   281  
   282  	// Ensure that the session selection is valid.
   283  	if err := r.Selection.EnsureValid(); err != nil {
   284  		return fmt.Errorf("invalid selection specification: %w", err)
   285  	}
   286  
   287  	// Success.
   288  	return nil
   289  }
   290  
   291  // EnsureValid verifies that a TerminateResponse is valid.
   292  func (r *TerminateResponse) EnsureValid() error {
   293  	// A nil terminate response is not valid.
   294  	if r == nil {
   295  		return errors.New("nil terminate response")
   296  	}
   297  
   298  	// Success.
   299  	return nil
   300  }