77 "fmt"
88 "net/http"
99 "net/url"
10+ "reflect"
1011 "strconv"
1112 "strings"
1213
@@ -144,6 +145,10 @@ func listEnterpriseTeams(ctx context.Context, client *githubv3.Client, enterpris
144145
145146//nolint:unparam
146147func getEnterpriseTeamBySlug (ctx context.Context , client * githubv3.Client , enterpriseSlug , teamSlug string ) (* enterpriseTeam , * githubv3.Response , error ) {
148+ if te , resp , err := getEnterpriseTeamBySlugSDK (ctx , client , enterpriseSlug , teamSlug ); err != errEnterpriseSDKUnavailable {
149+ return te , resp , err
150+ }
151+
147152 u := fmt .Sprintf ("enterprises/%s/teams/%s" , enterpriseSlug , teamSlug )
148153 req , err := enterpriseTeamsNewRequest (client , "GET" , u , nil )
149154 if err != nil {
@@ -160,6 +165,64 @@ func getEnterpriseTeamBySlug(ctx context.Context, client *githubv3.Client, enter
160165 return te , resp , err
161166}
162167
168+ var errEnterpriseSDKUnavailable = errors .New ("enterprise SDK GetTeam not available" )
169+
170+ // getEnterpriseTeamBySlugSDK attempts to use the go-github EnterpriseService.GetTeam
171+ // method if present (available in go-github >= v81). When the method is not yet
172+ // available in the SDK, it returns errEnterpriseSDKUnavailable so callers can
173+ // fall back to the custom REST implementation. This keeps the provider forward
174+ // compatible without requiring the SDK upgrade immediately.
175+ func getEnterpriseTeamBySlugSDK (ctx context.Context , client * githubv3.Client , enterpriseSlug , teamSlug string ) (* enterpriseTeam , * githubv3.Response , error ) {
176+ if client == nil || client .Enterprise == nil {
177+ return nil , nil , errEnterpriseSDKUnavailable
178+ }
179+
180+ method := reflect .ValueOf (client .Enterprise ).MethodByName ("GetTeam" )
181+ if ! method .IsValid () {
182+ return nil , nil , errEnterpriseSDKUnavailable
183+ }
184+
185+ results := method .Call ([]reflect.Value {
186+ reflect .ValueOf (ctx ),
187+ reflect .ValueOf (enterpriseSlug ),
188+ reflect .ValueOf (teamSlug ),
189+ })
190+ if len (results ) != 3 {
191+ return nil , nil , errEnterpriseSDKUnavailable
192+ }
193+
194+ var resp * githubv3.Response
195+ if ! results [1 ].IsNil () {
196+ if r , ok := results [1 ].Interface ().(* githubv3.Response ); ok {
197+ resp = r
198+ }
199+ }
200+
201+ if errVal := results [2 ]; ! errVal .IsNil () {
202+ if err , ok := errVal .Interface ().(error ); ok {
203+ return nil , resp , err
204+ }
205+ return nil , resp , errEnterpriseSDKUnavailable
206+ }
207+
208+ teamVal := results [0 ]
209+ if ! teamVal .IsValid () || teamVal .IsNil () {
210+ return nil , resp , nil
211+ }
212+
213+ bytes , err := json .Marshal (teamVal .Interface ())
214+ if err != nil {
215+ return nil , resp , err
216+ }
217+
218+ var te enterpriseTeam
219+ if err := json .Unmarshal (bytes , & te ); err != nil {
220+ return nil , resp , err
221+ }
222+
223+ return & te , resp , nil
224+ }
225+
163226func createEnterpriseTeam (ctx context.Context , client * githubv3.Client , enterpriseSlug string , reqBody enterpriseTeamCreateRequest ) (* enterpriseTeam , * githubv3.Response , error ) {
164227 u := fmt .Sprintf ("enterprises/%s/teams" , enterpriseSlug )
165228 req , err := enterpriseTeamsNewRequest (client , "POST" , u , reqBody )
0 commit comments