| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 |
- package smithy
- import "maps"
- // PropertiesReader provides an interface for reading metadata from the
- // underlying metadata container.
- type PropertiesReader interface {
- Get(key any) any
- }
- // Properties provides storing and reading metadata values. Keys may be any
- // comparable value type. Get and Set will panic if a key is not comparable.
- //
- // The zero value for a Properties instance is ready for reads/writes without
- // any additional initialization.
- type Properties struct {
- values map[any]any
- }
- // Get attempts to retrieve the value the key points to. Returns nil if the
- // key was not found.
- //
- // Panics if key type is not comparable.
- func (m *Properties) Get(key any) any {
- m.lazyInit()
- return m.values[key]
- }
- // Set stores the value pointed to by the key. If a value already exists at
- // that key it will be replaced with the new value.
- //
- // Panics if the key type is not comparable.
- func (m *Properties) Set(key, value any) {
- m.lazyInit()
- m.values[key] = value
- }
- // Has returns whether the key exists in the metadata.
- //
- // Panics if the key type is not comparable.
- func (m *Properties) Has(key any) bool {
- m.lazyInit()
- _, ok := m.values[key]
- return ok
- }
- // SetAll accepts all of the given Properties into the receiver, overwriting
- // any existing keys in the case of conflicts.
- func (m *Properties) SetAll(other *Properties) {
- if other.values == nil {
- return
- }
- m.lazyInit()
- for k, v := range other.values {
- m.values[k] = v
- }
- }
- // Values returns a shallow clone of the property set's values.
- func (m *Properties) Values() map[any]any {
- return maps.Clone(m.values)
- }
- func (m *Properties) lazyInit() {
- if m.values == nil {
- m.values = map[any]any{}
- }
- }
|