Files
wehub-resource-sync bf9395e022
CI / license-header (push) Has been skipped
CI / e2e-dry-run (push) Has been skipped
CI / fast-gate (push) Failing after 0s
Test PR Label Logic / test-pr-labels (push) Failing after 1s
Skill Format Check / check-format (push) Failing after 2s
CI / security (push) Failing after 5s
CI / unit-test (push) Has been skipped
CI / lint (push) Has been skipped
CI / script-test (push) Has been skipped
CI / deterministic-gate (push) Has been skipped
CI / coverage (push) Has been skipped
CI / results (push) Has been cancelled
CI / deadcode (push) Has been cancelled
CI / e2e-live (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 12:22:54 +08:00

43 lines
1.1 KiB
Go

// Copyright (c) 2026 Lark Technologies Pte. Ltd.
// SPDX-License-Identifier: MIT
package schemas
import "sort"
// FieldMeta overrides win over struct tags; non-empty fields replace schema annotations.
type FieldMeta struct {
Description string
Enum []string
Kind string // renders to JSON Schema "format" (open_id / chat_id / timestamp_ms …)
}
// ApplyFieldOverrides mutates schema in place; returns unresolved pointer paths (orphans).
func ApplyFieldOverrides(schema map[string]interface{}, overrides map[string]FieldMeta) []string {
var orphans []string
for path, meta := range overrides {
nodes := ResolvePointer(schema, path)
if len(nodes) == 0 {
orphans = append(orphans, path)
continue
}
for _, node := range nodes {
if meta.Description != "" {
node["description"] = meta.Description
}
if len(meta.Enum) > 0 {
arr := make([]interface{}, len(meta.Enum))
for i, v := range meta.Enum {
arr[i] = v
}
node["enum"] = arr
}
if meta.Kind != "" {
node["format"] = meta.Kind
}
}
}
sort.Strings(orphans)
return orphans
}