| 
									
										
										
										
											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
										 |  |  | 	}
 | 
					
						
							|  |  |  | }
 |