| Fatih Arslan | f3d3802 | 2014-08-13 19:53:15 | [diff] [blame] | 1 | package structs |
| Fatih Arslan | fc5199c | 2014-08-07 15:17:41 | [diff] [blame] | 2 | |
| 3 | import "strings" |
| 4 | |
| 5 | // tagOptions contains a slice of tag options |
| 6 | type tagOptions []string |
| 7 | |
| Fatih Arslan | 1b32eb1 | 2014-08-08 08:49:06 | [diff] [blame] | 8 | // Has returns true if the given optiton is available in tagOptions |
| Fatih Arslan | fc5199c | 2014-08-07 15:17:41 | [diff] [blame] | 9 | func (t tagOptions) Has(opt string) bool { |
| 10 | for _, tagOpt := range t { |
| 11 | if tagOpt == opt { |
| 12 | return true |
| 13 | } |
| 14 | } |
| 15 | |
| 16 | return false |
| 17 | } |
| 18 | |
| 19 | // parseTag splits a struct field's tag into its name and a list of options |
| Fatih Arslan | 137635f | 2014-08-07 18:23:01 | [diff] [blame] | 20 | // which comes after a name. A tag is in the form of: "name,option1,option2". |
| 21 | // The name can be neglectected. |
| Fatih Arslan | fc5199c | 2014-08-07 15:17:41 | [diff] [blame] | 22 | func parseTag(tag string) (string, tagOptions) { |
| Fatih Arslan | fc5199c | 2014-08-07 15:17:41 | [diff] [blame] | 23 | // tag is one of followings: |
| Fatih Arslan | f59cd82 | 2014-08-08 10:45:04 | [diff] [blame] | 24 | // "" |
| 25 | // "name" |
| Fatih Arslan | fc5199c | 2014-08-07 15:17:41 | [diff] [blame] | 26 | // "name,opt" |
| 27 | // "name,opt,opt2" |
| 28 | // ",opt" |
| Fatih Arslan | f59cd82 | 2014-08-08 10:45:04 | [diff] [blame] | 29 | |
| 30 | res := strings.Split(tag, ",") |
| Fatih Arslan | fc5199c | 2014-08-07 15:17:41 | [diff] [blame] | 31 | return res[0], res[1:] |
| 32 | } |