MCPcopy
hub / github.com/github/github-mcp-server / optionalIssueWriteFields

Function optionalIssueWriteFields

pkg/github/issues.go:233–300  ·  view source on GitHub ↗
(args map[string]any)

Source from the content-addressed store, hash-verified

231}
232
233func optionalIssueWriteFields(args map[string]any) ([]issueWriteFieldInput, error) {
234 issueFieldsRaw, exists := args["issue_fields"]
235 if !exists {
236 return nil, nil
237 }
238
239 var inputMaps []map[string]any
240 switch v := issueFieldsRaw.(type) {
241 case []any:
242 for _, item := range v {
243 itemMap, ok := item.(map[string]any)
244 if !ok {
245 return nil, fmt.Errorf("each issue_fields item must be an object")
246 }
247 inputMaps = append(inputMaps, itemMap)
248 }
249 case []map[string]any:
250 inputMaps = v
251 default:
252 return nil, fmt.Errorf("issue_fields must be an array")
253 }
254
255 issueFields := make([]issueWriteFieldInput, 0, len(inputMaps))
256 for _, itemMap := range inputMaps {
257 fieldName, err := RequiredParam[string](itemMap, "field_name")
258 if err != nil || strings.TrimSpace(fieldName) == "" {
259 return nil, fmt.Errorf("field_name is required for each issue_fields item")
260 }
261
262 fieldOptionName, err := OptionalParam[string](itemMap, "field_option_name")
263 if err != nil {
264 return nil, err
265 }
266
267 deleteField, _ := OptionalParam[bool](itemMap, "delete")
268 value, hasValue := itemMap["value"]
269 if hasValue && value == nil {
270 return nil, fmt.Errorf("value cannot be null for field %q", fieldName)
271 }
272
273 if deleteField {
274 if hasValue || fieldOptionName != "" {
275 return nil, fmt.Errorf("issue field %q cannot specify 'delete' together with 'value' or 'field_option_name'", fieldName)
276 }
277 issueFields = append(issueFields, issueWriteFieldInput{
278 FieldName: fieldName,
279 Delete: true,
280 })
281 continue
282 }
283
284 if hasValue && fieldOptionName != "" {
285 return nil, fmt.Errorf("issue field %q cannot specify both value and field_option_name", fieldName)
286 }
287
288 if !hasValue && fieldOptionName == "" {
289 return nil, fmt.Errorf("issue field %q must specify either value or field_option_name", fieldName)
290 }

Callers 1

IssueWriteFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected