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 }