mirror of
https://github.com/coder/coder.git
synced 2026-06-03 04:58:23 +00:00
f1d333f0e6
Audited exported helpers in `coderd/util/*`, `testutil`, `cryptorand`, and friends, then replaced duplicated implementations with canonical versions. - **fix: `maps.SortedKeys` generic signature** — value type was hardcoded to `any`, making it impossible to actually call. Added second type parameter `V any`. Added table-driven tests with `cmp.Diff`. - **refactor: replace ad-hoc ptr helpers with `ptr.Ref`** — removed `int64Ptr`, `stringPtr`, `boolPtr`, `i64ptr`, `strPtr`, `PtrInt32` across 6 files. - **refactor: replace local `sortedKeys`/`sortKeys` with `maps.SortedKeys`** — now that the signature is fixed, scripts can use it. - **refactor: replace hand-rolled `capitalize` with `strings.Capitalize`** — the typegen version was also not UTF-8 safe. > 🤖 This PR was created with the help of Coder Agents, and was reviewed by my human. 🧑💻
41 lines
966 B
Go
41 lines
966 B
Go
package maps
|
|
|
|
import (
|
|
"sort"
|
|
|
|
"golang.org/x/exp/constraints"
|
|
)
|
|
|
|
func Map[K comparable, F any, T any](params map[K]F, convert func(F) T) map[K]T {
|
|
into := make(map[K]T)
|
|
for k, item := range params {
|
|
into[k] = convert(item)
|
|
}
|
|
return into
|
|
}
|
|
|
|
// Subset returns true if all the keys of a are present
|
|
// in b and have the same values.
|
|
// If the corresponding value of a[k] is the zero value in
|
|
// b, Subset will skip comparing that value.
|
|
// This allows checking for the presence of map keys.
|
|
func Subset[T, U comparable](a, b map[T]U) bool {
|
|
var uz U
|
|
for ka, va := range a {
|
|
ignoreZeroValue := va == uz
|
|
if vb, ok := b[ka]; !ok || (!ignoreZeroValue && va != vb) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// SortedKeys returns the keys of m in sorted order.
|
|
func SortedKeys[K constraints.Ordered, V any](m map[K]V) (keys []K) {
|
|
for k := range m {
|
|
keys = append(keys, k)
|
|
}
|
|
sort.Slice(keys, func(i, j int) bool { return keys[i] < keys[j] })
|
|
return keys
|
|
}
|