|
7 | 7 | "context"
|
8 | 8 | "errors"
|
9 | 9 | "fmt"
|
10 |
| - "strings" |
11 | 10 | )
|
12 | 11 |
|
13 | 12 | // ErrPartialResource is returned by a detector when complete source
|
@@ -57,62 +56,37 @@ func Detect(ctx context.Context, detectors ...Detector) (*Resource, error) {
|
57 | 56 | // these errors will be returned. Otherwise, nil is returned.
|
58 | 57 | func detect(ctx context.Context, res *Resource, detectors []Detector) error {
|
59 | 58 | var (
|
60 |
| - r *Resource |
61 |
| - errs detectErrs |
62 |
| - err error |
| 59 | + r *Resource |
| 60 | + err error |
| 61 | + e error |
63 | 62 | )
|
64 | 63 |
|
65 | 64 | for _, detector := range detectors {
|
66 | 65 | if detector == nil {
|
67 | 66 | continue
|
68 | 67 | }
|
69 |
| - r, err = detector.Detect(ctx) |
70 |
| - if err != nil { |
71 |
| - errs = append(errs, err) |
72 |
| - if !errors.Is(err, ErrPartialResource) { |
| 68 | + r, e = detector.Detect(ctx) |
| 69 | + if e != nil { |
| 70 | + err = errors.Join(err, e) |
| 71 | + if !errors.Is(e, ErrPartialResource) { |
73 | 72 | continue
|
74 | 73 | }
|
75 | 74 | }
|
76 |
| - r, err = Merge(res, r) |
77 |
| - if err != nil { |
78 |
| - errs = append(errs, err) |
| 75 | + r, e = Merge(res, r) |
| 76 | + if e != nil { |
| 77 | + err = errors.Join(err, e) |
79 | 78 | }
|
80 | 79 | *res = *r
|
81 | 80 | }
|
82 | 81 |
|
83 |
| - if len(errs) == 0 { |
84 |
| - return nil |
85 |
| - } |
86 |
| - if errors.Is(errs, ErrSchemaURLConflict) { |
87 |
| - // If there has been a merge conflict, ensure the resource has no |
88 |
| - // schema URL. |
89 |
| - res.schemaURL = "" |
90 |
| - } |
91 |
| - return errs |
92 |
| -} |
93 |
| - |
94 |
| -type detectErrs []error |
95 |
| - |
96 |
| -func (e detectErrs) Error() string { |
97 |
| - errStr := make([]string, len(e)) |
98 |
| - for i, err := range e { |
99 |
| - errStr[i] = fmt.Sprintf("* %s", err) |
100 |
| - } |
101 |
| - |
102 |
| - format := "%d errors occurred detecting resource:\n\t%s" |
103 |
| - return fmt.Sprintf(format, len(e), strings.Join(errStr, "\n\t")) |
104 |
| -} |
| 82 | + if err != nil { |
| 83 | + if errors.Is(err, ErrSchemaURLConflict) { |
| 84 | + // If there has been a merge conflict, ensure the resource has no |
| 85 | + // schema URL. |
| 86 | + res.schemaURL = "" |
| 87 | + } |
105 | 88 |
|
106 |
| -func (e detectErrs) Unwrap() error { |
107 |
| - switch len(e) { |
108 |
| - case 0: |
109 |
| - return nil |
110 |
| - case 1: |
111 |
| - return e[0] |
| 89 | + err = fmt.Errorf("error detecting resource: %w", err) |
112 | 90 | }
|
113 |
| - return e[1:] |
114 |
| -} |
115 |
| - |
116 |
| -func (e detectErrs) Is(target error) bool { |
117 |
| - return len(e) != 0 && errors.Is(e[0], target) |
| 91 | + return err |
118 | 92 | }
|
0 commit comments