| 
									
										
										
										
											2016-08-31 19:10:10 +02:00
										 |  |  | package restic | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | import ( | 
					
						
							|  |  |  | 	"fmt" | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-23 14:21:03 +02:00
										 |  |  | 	"github.com/restic/restic/internal/errors" | 
					
						
							| 
									
										
										
										
											2016-08-31 19:10:10 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-31 20:29:54 +02:00
										 |  |  | // FileType is the type of a file in the backend. | 
					
						
							| 
									
										
										
										
											2022-10-16 10:36:37 +02:00
										 |  |  | type FileType uint8 | 
					
						
							| 
									
										
										
										
											2016-08-31 20:29:54 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | // These are the different data types a backend can store. | 
					
						
							|  |  |  | const ( | 
					
						
							| 
									
										
										
										
											2022-10-16 10:36:37 +02:00
										 |  |  | 	PackFile FileType = 1 + iota | 
					
						
							|  |  |  | 	KeyFile | 
					
						
							|  |  |  | 	LockFile | 
					
						
							|  |  |  | 	SnapshotFile | 
					
						
							|  |  |  | 	IndexFile | 
					
						
							|  |  |  | 	ConfigFile | 
					
						
							| 
									
										
										
										
											2016-08-31 20:29:54 +02:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2022-10-16 10:36:37 +02:00
										 |  |  | func (t FileType) String() string { | 
					
						
							|  |  |  | 	s := "invalid" | 
					
						
							|  |  |  | 	switch t { | 
					
						
							|  |  |  | 	case PackFile: | 
					
						
							|  |  |  | 		// Spelled "data" instead of "pack" for historical reasons. | 
					
						
							|  |  |  | 		s = "data" | 
					
						
							|  |  |  | 	case KeyFile: | 
					
						
							|  |  |  | 		s = "key" | 
					
						
							|  |  |  | 	case LockFile: | 
					
						
							|  |  |  | 		s = "lock" | 
					
						
							|  |  |  | 	case SnapshotFile: | 
					
						
							|  |  |  | 		s = "snapshot" | 
					
						
							|  |  |  | 	case IndexFile: | 
					
						
							|  |  |  | 		s = "index" | 
					
						
							|  |  |  | 	case ConfigFile: | 
					
						
							|  |  |  | 		s = "config" | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	return s | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-08-31 19:10:10 +02:00
										 |  |  | // Handle is used to store and access data in a backend. | 
					
						
							|  |  |  | type Handle struct { | 
					
						
							| 
									
										
										
										
											2023-10-01 10:52:57 +02:00
										 |  |  | 	Type       FileType | 
					
						
							|  |  |  | 	IsMetadata bool | 
					
						
							|  |  |  | 	Name       string | 
					
						
							| 
									
										
										
										
											2016-08-31 19:10:10 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | func (h Handle) String() string { | 
					
						
							|  |  |  | 	name := h.Name | 
					
						
							|  |  |  | 	if len(name) > 10 { | 
					
						
							|  |  |  | 		name = name[:10] | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-09-01 21:19:30 +02:00
										 |  |  | 	return fmt.Sprintf("<%s/%s>", h.Type, name) | 
					
						
							| 
									
										
										
										
											2016-08-31 19:10:10 +02:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Valid returns an error if h is not valid. | 
					
						
							|  |  |  | func (h Handle) Valid() error { | 
					
						
							| 
									
										
										
										
											2016-09-01 21:19:30 +02:00
										 |  |  | 	switch h.Type { | 
					
						
							| 
									
										
										
										
											2020-08-16 11:16:38 +02:00
										 |  |  | 	case PackFile: | 
					
						
							| 
									
										
										
										
											2016-08-31 19:10:10 +02:00
										 |  |  | 	case KeyFile: | 
					
						
							|  |  |  | 	case LockFile: | 
					
						
							|  |  |  | 	case SnapshotFile: | 
					
						
							|  |  |  | 	case IndexFile: | 
					
						
							|  |  |  | 	case ConfigFile: | 
					
						
							|  |  |  | 	default: | 
					
						
							| 
									
										
										
										
											2022-10-16 10:36:37 +02:00
										 |  |  | 		return errors.Errorf("invalid Type %d", h.Type) | 
					
						
							| 
									
										
										
										
											2016-08-31 19:10:10 +02:00
										 |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-09-01 21:19:30 +02:00
										 |  |  | 	if h.Type == ConfigFile { | 
					
						
							| 
									
										
										
										
											2016-08-31 19:10:10 +02:00
										 |  |  | 		return nil | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if h.Name == "" { | 
					
						
							|  |  |  | 		return errors.New("invalid Name") | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	return nil | 
					
						
							|  |  |  | } |