| 
									
										
										
										
											2016-09-07 11:10:16 +01:00
										 |  |  | package response | 
					
						
							| 
									
										
										
										
											2016-04-26 17:57:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-29 15:06:42 +01:00
										 |  |  | import "fmt" | 
					
						
							| 
									
										
										
										
											2016-10-10 12:09:29 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | // Class holds sets of Types | 
					
						
							|  |  |  | type Class int | 
					
						
							| 
									
										
										
										
											2016-04-26 17:57:11 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | const ( | 
					
						
							| 
									
										
										
										
											2016-10-10 12:09:29 +01:00
										 |  |  | 	// All is a meta class encompassing all the classes. | 
					
						
							|  |  |  | 	All Class = iota | 
					
						
							|  |  |  | 	// Success is a class for a successful response. | 
					
						
							|  |  |  | 	Success | 
					
						
							|  |  |  | 	// Denial is a class for denying existence (NXDOMAIN, or a nodata: type does not exist) | 
					
						
							|  |  |  | 	Denial | 
					
						
							|  |  |  | 	// Error is a class for errors, right now defined as not Success and not Denial | 
					
						
							|  |  |  | 	Error | 
					
						
							| 
									
										
										
										
											2016-04-26 17:57:11 +01:00
										 |  |  | ) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-10 12:09:29 +01:00
										 |  |  | func (c Class) String() string { | 
					
						
							|  |  |  | 	switch c { | 
					
						
							|  |  |  | 	case All: | 
					
						
							|  |  |  | 		return "all" | 
					
						
							| 
									
										
										
										
											2016-10-02 08:31:44 +01:00
										 |  |  | 	case Success: | 
					
						
							| 
									
										
										
										
											2016-10-10 12:09:29 +01:00
										 |  |  | 		return "success" | 
					
						
							|  |  |  | 	case Denial: | 
					
						
							|  |  |  | 		return "denial" | 
					
						
							|  |  |  | 	case Error: | 
					
						
							|  |  |  | 		return "error" | 
					
						
							| 
									
										
										
										
											2016-10-02 08:31:44 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | 	return "" | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-10-10 12:09:29 +01:00
										 |  |  | // ClassFromString returns the class from the string s. If not class matches | 
					
						
							|  |  |  | // the All class and an error are returned | 
					
						
							|  |  |  | func ClassFromString(s string) (Class, error) { | 
					
						
							|  |  |  | 	switch s { | 
					
						
							|  |  |  | 	case "all": | 
					
						
							|  |  |  | 		return All, nil | 
					
						
							|  |  |  | 	case "success": | 
					
						
							|  |  |  | 		return Success, nil | 
					
						
							|  |  |  | 	case "denial": | 
					
						
							|  |  |  | 		return Denial, nil | 
					
						
							|  |  |  | 	case "error": | 
					
						
							|  |  |  | 		return Error, nil | 
					
						
							| 
									
										
										
										
											2016-04-26 17:57:11 +01:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-10-10 12:09:29 +01:00
										 |  |  | 	return All, fmt.Errorf("invalid Class: %s", s) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-04-26 17:57:11 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-29 15:06:42 +01:00
										 |  |  | // Classify classifies the Type t, it returns its Class. | 
					
						
							|  |  |  | func Classify(t Type) Class { | 
					
						
							| 
									
										
										
										
											2016-10-10 12:09:29 +01:00
										 |  |  | 	switch t { | 
					
						
							|  |  |  | 	case NoError, Delegation: | 
					
						
							|  |  |  | 		return Success | 
					
						
							|  |  |  | 	case NameError, NoData: | 
					
						
							|  |  |  | 		return Denial | 
					
						
							|  |  |  | 	case OtherError: | 
					
						
							|  |  |  | 		fallthrough | 
					
						
							|  |  |  | 	default: | 
					
						
							|  |  |  | 		return Error | 
					
						
							| 
									
										
										
										
											2016-04-26 17:57:11 +01:00
										 |  |  | 	} | 
					
						
							|  |  |  | } |