importstack.go 567 B

12345678910111213141516171819202122232425262728293031
  1. package importstack
  2. import "errors"
  3. // ErrImportCycleNotAllowed defines an error for circular importing
  4. var ErrImportCycleNotAllowed = errors.New("import cycle not allowed")
  5. // ImportStack a stack of import paths
  6. type ImportStack []string
  7. func New() *ImportStack {
  8. return &ImportStack{}
  9. }
  10. func (s *ImportStack) Push(p string) error {
  11. for _, x := range *s {
  12. if x == p {
  13. return ErrImportCycleNotAllowed
  14. }
  15. }
  16. *s = append(*s, p)
  17. return nil
  18. }
  19. func (s *ImportStack) Pop() {
  20. *s = (*s)[0 : len(*s)-1]
  21. }
  22. func (s *ImportStack) List() []string {
  23. return *s
  24. }