Ejemplo n.º 1
0
        private void ValidateTokenTypeForAttribute(CloudEventAttribute attribute, JsonValueKind valueKind)
        {
            // We can't validate unknown attributes, don't check for extension attributes,
            // and null values will be ignored anyway.
            if (attribute is null || attribute.IsExtension || valueKind == JsonValueKind.Null)
            {
                return;
            }

            // This is deliberately written so that if a new attribute type is added without this being updated, we "fail valid".
            // (That should only happen in major versions anyway, but it's worth being somewhat forgiving here.)
            var valid = CloudEventAttributeTypes.GetOrdinal(attribute.Type) switch
            {
                CloudEventAttributeTypeOrdinal.Binary => valueKind == JsonValueKind.String,
                CloudEventAttributeTypeOrdinal.Boolean => valueKind == JsonValueKind.True || valueKind == JsonValueKind.False,
                CloudEventAttributeTypeOrdinal.Integer => valueKind == JsonValueKind.Number,
                CloudEventAttributeTypeOrdinal.String => valueKind == JsonValueKind.String,
                CloudEventAttributeTypeOrdinal.Timestamp => valueKind == JsonValueKind.String,
                CloudEventAttributeTypeOrdinal.Uri => valueKind == JsonValueKind.String,
                CloudEventAttributeTypeOrdinal.UriReference => valueKind == JsonValueKind.String,
                _ => true
            };

            if (!valid)
            {
                throw new ArgumentException($"Invalid token type '{valueKind}' for CloudEvent attribute '{attribute.Name}' with type '{attribute.Type}'");
            }
        }
Ejemplo n.º 2
0
        private void WriteCloudEventForBatchOrStructuredMode(Utf8JsonWriter writer, CloudEvent cloudEvent)
        {
            Validation.CheckCloudEventArgument(cloudEvent, nameof(cloudEvent));

            writer.WriteStartObject();
            writer.WritePropertyName(CloudEventsSpecVersion.SpecVersionAttribute.Name);
            writer.WriteStringValue(cloudEvent.SpecVersion.VersionId);
            var attributes = cloudEvent.GetPopulatedAttributes();

            foreach (var keyValuePair in attributes)
            {
                var attribute = keyValuePair.Key;
                var value     = keyValuePair.Value;
                writer.WritePropertyName(attribute.Name);
                switch (CloudEventAttributeTypes.GetOrdinal(attribute.Type))
                {
                case CloudEventAttributeTypeOrdinal.Integer:
                    writer.WriteNumberValue((int)value);
                    break;

                case CloudEventAttributeTypeOrdinal.Boolean:
                    writer.WriteBooleanValue((bool)value);
                    break;

                default:
                    writer.WriteStringValue(attribute.Type.Format(value));
                    break;
                }
            }

            if (cloudEvent.Data is object)
            {
                EncodeStructuredModeData(cloudEvent, writer);
            }
            writer.WriteEndObject();
        }
Ejemplo n.º 3
0
 public void GetOrdinal_NonNullInput(CloudEventAttributeType type) =>
 Assert.Equal(type.Ordinal, CloudEventAttributeTypes.GetOrdinal(type));
Ejemplo n.º 4
0
 public void GetOrdinal_NullInput() =>
 Assert.Throws <ArgumentNullException>(() => CloudEventAttributeTypes.GetOrdinal(null));