<PackageReference Include="Azure.Core" Version="1.47.2" />

CloudEventExtensionAttributes<TKey, TValue>

class CloudEventExtensionAttributes<TKey, TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable
using Azure.Core; using System; using System.Collections; using System.Collections.Generic; using System.Runtime.CompilerServices; namespace Azure.Messaging { [System.Runtime.CompilerServices.NullableContext(1)] [System.Runtime.CompilerServices.Nullable(0)] internal class CloudEventExtensionAttributes<TKey, [System.Runtime.CompilerServices.Nullable(2)] TValue> : IDictionary<TKey, TValue>, ICollection<KeyValuePair<TKey, TValue>>, IEnumerable<KeyValuePair<TKey, TValue>>, IEnumerable where TKey : class { private readonly Dictionary<TKey, TValue> _backingDictionary; private static readonly HashSet<string> s_reservedAttributes = new HashSet<string> { "specversion", "id", "source", "type", "datacontenttype", "dataschema", "subject", "time", "data", "data_base64" }; public TValue this[TKey key] { get { return _backingDictionary[key]; } set { ValidateAttribute(key as string, value); _backingDictionary[key] = value; } } public ICollection<TKey> Keys => _backingDictionary.Keys; public ICollection<TValue> Values => _backingDictionary.Values; public int Count => _backingDictionary.Count; public bool IsReadOnly => ((ICollection<KeyValuePair<TKey, TValue>>)_backingDictionary).IsReadOnly; public CloudEventExtensionAttributes() { _backingDictionary = new Dictionary<TKey, TValue>(); } public void Add(TKey key, TValue value) { ValidateAttribute(key as string, value); _backingDictionary.Add(key, value); } public void AddWithoutValidation(TKey key, TValue value) { _backingDictionary.Add(key, value); } public void Add([System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1, 1 })] KeyValuePair<TKey, TValue> item) { ValidateAttribute(item.Key as string, item.Value); ((ICollection<KeyValuePair<TKey, TValue>>)_backingDictionary).Add(item); } public void Clear() { _backingDictionary.Clear(); } public bool Contains([System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1, 1 })] KeyValuePair<TKey, TValue> item) { return ((ICollection<KeyValuePair<TKey, TValue>>)_backingDictionary).Contains(item); } public bool ContainsKey(TKey key) { return _backingDictionary.ContainsKey(key); } public void CopyTo([System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1, 1 })] KeyValuePair<TKey, TValue>[] array, int arrayIndex) { ((ICollection<KeyValuePair<TKey, TValue>>)_backingDictionary).CopyTo(array, arrayIndex); } [return: System.Runtime.CompilerServices.Nullable(new byte[] { 1, 0, 1, 1 })] public IEnumerator<KeyValuePair<TKey, TValue>> GetEnumerator() { return _backingDictionary.GetEnumerator(); } public bool Remove(TKey key) { return _backingDictionary.Remove(key); } public bool Remove([System.Runtime.CompilerServices.Nullable(new byte[] { 0, 1, 1 })] KeyValuePair<TKey, TValue> item) { return ((ICollection<KeyValuePair<TKey, TValue>>)_backingDictionary).Remove(item); } public bool TryGetValue(TKey key, out TValue value) { return _backingDictionary.TryGetValue(key, out value); } IEnumerator IEnumerable.GetEnumerator() { return _backingDictionary.GetEnumerator(); } [System.Runtime.CompilerServices.NullableContext(2)] private static void ValidateAttribute(string name, object value) { Argument.AssertNotNullOrEmpty(name, "name"); Argument.AssertNotNull<object>(value, "value"); if (s_reservedAttributes.Contains(name)) throw new ArgumentException("Attribute name cannot use the reserved attribute: '" + name + "'", "name"); foreach (char c in name) { if ((c < '0' || c > '9') && (c < 'a' || c > 'z')) throw new ArgumentException($"""{c}""" + "CloudEvent attribute names must consist of lower-case letters ('a' to 'z') or digits ('0' to '9') from the ASCII character set.", "name"); } if (value is string || value is byte[] || value is ReadOnlyMemory<byte> || value is int || value is bool || value is Uri || value is DateTime || value is DateTimeOffset) return; throw new ArgumentException($"""{value.GetType()}""" + "Attribute values must be of type string, bool, byte, int, Uri, DateTime, or DateTimeOffset."); } } }