mergeAIProviderSettings overlays a patch onto an existing settings value. Write-only fields (Bedrock AccessKey and AccessKeySecret) use pointers so the patch can distinguish "omitted, keep existing" (nil) from "explicitly clear" (pointer to empty string) - e.g. when an admin migrates from static AWS
(existing, patch codersdk.AIProviderSettings)
| 760 | // admin migrates from static AWS credentials to IAM role-based auth |
| 761 | // in a single PATCH. |
| 762 | func mergeAIProviderSettings(existing, patch codersdk.AIProviderSettings) codersdk.AIProviderSettings { |
| 763 | if patch.Bedrock == nil { |
| 764 | // Patch carries no type-specific data; treat as a clear. |
| 765 | return codersdk.AIProviderSettings{} |
| 766 | } |
| 767 | merged := *patch.Bedrock |
| 768 | if existing.Bedrock != nil { |
| 769 | if merged.AccessKey == nil { |
| 770 | merged.AccessKey = existing.Bedrock.AccessKey |
| 771 | } |
| 772 | if merged.AccessKeySecret == nil { |
| 773 | merged.AccessKeySecret = existing.Bedrock.AccessKeySecret |
| 774 | } |
| 775 | } |
| 776 | return codersdk.AIProviderSettings{Bedrock: &merged} |
| 777 | } |