1 // Copyright (c) 2017 Ernest Micklei 2 // 3 // MIT License 4 // 5 // Permission is hereby granted, free of charge, to any person obtaining 6 // a copy of this software and associated documentation files (the 7 // "Software"), to deal in the Software without restriction, including 8 // without limitation the rights to use, copy, modify, merge, publish, 9 // distribute, sublicense, and/or sell copies of the Software, and to 10 // permit persons to whom the Software is furnished to do so, subject to 11 // the following conditions: 12 // 13 // The above copyright notice and this permission notice shall be 14 // included in all copies or substantial portions of the Software. 15 // 16 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 17 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 18 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND 19 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE 20 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION 21 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION 22 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 23 24 package proto 25 26 type collector struct { 27 proto *Proto 28 } 29 30 func collect(p *Proto) collector { 31 return collector{p} 32 } 33 34 func (c collector) Comments() (list []*Comment) { 35 for _, each := range c.proto.Elements { 36 if c, ok := each.(*Comment); ok { 37 list = append(list, c) 38 } 39 } 40 return 41 } 42 43 func (c collector) Enums() (list []*Enum) { 44 for _, each := range c.proto.Elements { 45 if c, ok := each.(*Enum); ok { 46 list = append(list, c) 47 } 48 } 49 return 50 } 51 52 func (c collector) Messages() (list []*Message) { 53 for _, each := range c.proto.Elements { 54 if c, ok := each.(*Message); ok { 55 list = append(list, c) 56 } 57 } 58 return 59 } 60 61 func (c collector) Services() (list []*Service) { 62 for _, each := range c.proto.Elements { 63 if c, ok := each.(*Service); ok { 64 list = append(list, c) 65 } 66 } 67 return 68 } 69