Ejemplo n.º 1
0
        /// <summary>
        /// Generates schema for given .NET Type
        /// </summary>
        public static string GenerateSchema(Type type)
        {
            var schemaBuilder = new ReflectionSchemaBuilder(new AvroSerializerSettings());
            var schema        = schemaBuilder.BuildSchema(type);

            return(schema.ToString());
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Generates schema for given .NET Type
        /// <paramref name="includeOnlyDataContractMembers"/> indicates if only classes with DataContractAttribute and properties marked with DataMemberAttribute should be returned
        /// </summary>
        public static string GenerateSchema(Type type, bool includeOnlyDataContractMembers)
        {
            var builder = new ReflectionSchemaBuilder(new AvroSerializerSettings(includeOnlyDataContractMembers));
            var schema  = builder.BuildSchema(type);

            return(schema.ToString());
        }
        private static void RoundTripTestNullableSchema(
            AvroSerializerSettings settings,
            bool rootSchemaIsUnion,
            bool nullableValueSchemaNullableIsUnion,
            bool nullableValueSchemaNotNullableIsUnion,
            bool valueSchemaNullableIsUnion,
            bool valueSchemaNotNullableIsUnion,
            bool referenceSchemaNullableIsUnion,
            bool referenceSchemaNotNullableIsUnion)
        {
            var          builder      = new ReflectionSchemaBuilder(settings);
            var          schema       = builder.BuildSchema(typeof(ClassWithSchemaNullableField));
            RecordSchema recordSchema = null;

            if (rootSchemaIsUnion)
            {
                var asUnion = schema as UnionSchema;
                Assert.IsNotNull(asUnion);

                var innerNullSchema = asUnion.Schemas[0] is NullSchema
                ? asUnion.Schemas[0]
                : asUnion.Schemas[1];

                recordSchema = asUnion.Schemas.Single(s => s != innerNullSchema) as RecordSchema;
                Assert.IsNotNull(recordSchema);
            }
            else
            {
                recordSchema = schema as RecordSchema;
                Assert.IsNotNull(recordSchema);
            }

            Assert.AreEqual(typeof(ClassWithSchemaNullableField).GetAllFields().Count(), recordSchema.Fields.Count);

            var nullableValueSchemaNullable = recordSchema.Fields.Single(f => f.Name == "NullableValueNullableSchema");

            ValidateSchema(nullableValueSchemaNullable.TypeSchema, nullableValueSchemaNullableIsUnion, typeof(IntSchema));

            var nullableValueSchemaNotNullable = recordSchema.Fields.Single(f => f.Name == "NullableValueNotNullableSchema");

            ValidateSchema(nullableValueSchemaNotNullable.TypeSchema, nullableValueSchemaNotNullableIsUnion, typeof(IntSchema));

            var valueSchemaNullable = recordSchema.Fields.Single(f => f.Name == "NotNullableValueNullableSchema");

            ValidateSchema(valueSchemaNullable.TypeSchema, valueSchemaNullableIsUnion, typeof(IntSchema));

            var valueSchemaNotNullable = recordSchema.Fields.Single(f => f.Name == "NotNullableValueNotNullableSchema");

            ValidateSchema(valueSchemaNotNullable.TypeSchema, valueSchemaNotNullableIsUnion, typeof(IntSchema));

            var referenceSchemaNullable = recordSchema.Fields.Single(f => f.Name == "ReferenceFieldNullableSchema");

            ValidateSchema(referenceSchemaNullable.TypeSchema, referenceSchemaNullableIsUnion, typeof(RecordSchema));

            var referenceSchemaNotNullable = recordSchema.Fields.Single(f => f.Name == "ReferenceFieldNotNullableSchema");

            ValidateSchema(referenceSchemaNotNullable.TypeSchema, referenceSchemaNotNullableIsUnion, typeof(RecordSchema));
        }
Ejemplo n.º 4
0
        public void BuildGuidSchema(Type type)
        {
            //Act
            var        builder = new ReflectionSchemaBuilder();
            TypeSchema schema  = builder.BuildSchema(type);


            //Assert
            Assert.IsType <UuidSchema>(schema);
            var uuidSchema = (UuidSchema)schema;

            Assert.NotNull(uuidSchema);
        }
Ejemplo n.º 5
0
        public void BuildDateTimeSchema(Type type)
        {
            //Act
            var        builder = new ReflectionSchemaBuilder();
            TypeSchema schema  = builder.BuildSchema(type);


            //Assert
            Assert.IsType <TimestampMillisecondsSchema>(schema);
            var resolvedSchema = (TimestampMillisecondsSchema)schema;

            Assert.NotNull(resolvedSchema);
        }
Ejemplo n.º 6
0
        public void BuildTimespanSchema(Type type)
        {
            //Act
            var        builder = new ReflectionSchemaBuilder();
            TypeSchema schema  = builder.BuildSchema(type);


            //Assert
            Assert.IsType <DurationSchema>(schema);
            var resolvedSchema = (DurationSchema)schema;

            Assert.NotNull(resolvedSchema);
        }
Ejemplo n.º 7
0
        public void BuildDecimalSchema(Type type, int precision, int scale)
        {
            //Act
            var        builder = new ReflectionSchemaBuilder();
            TypeSchema schema  = builder.BuildSchema(type);


            //Assert
            Assert.IsType <DecimalSchema>(schema);
            var decimalSchema = (DecimalSchema)schema;

            Assert.NotNull(schema);
            Assert.Equal(precision, decimalSchema.Precision);
            Assert.Equal(scale, decimalSchema.Scale);
        }
Ejemplo n.º 8
0
        public void BuildNullableGuidSchema(Type type)
        {
            //Act
            var        builder = new ReflectionSchemaBuilder();
            TypeSchema schema  = builder.BuildSchema(type);


            //Assert
            Assert.IsType <UnionSchema>(schema);
            var unionSchema = (UnionSchema)schema;

            Assert.IsType <NullSchema>(unionSchema.Schemas[0]);
            Assert.IsType <UuidSchema>(unionSchema.Schemas[1]);

            var uuidSchema = (UuidSchema)unionSchema.Schemas[1];

            Assert.NotNull(uuidSchema);
        }
Ejemplo n.º 9
0
        public void BuildTimeSpanSchema(Type type)
        {
            //Act
            var        builder = new ReflectionSchemaBuilder();
            TypeSchema schema  = builder.BuildSchema(type);


            //Assert
            Assert.IsType <UnionSchema>(schema);
            var unionSchema = (UnionSchema)schema;

            Assert.IsType <NullSchema>(unionSchema.Schemas[0]);
            Assert.IsType <DurationSchema>(unionSchema.Schemas[1]);

            var resolvedSchema = (DurationSchema)unionSchema.Schemas[1];

            Assert.NotNull(resolvedSchema);
        }
Ejemplo n.º 10
0
        public void BuildNullableDateTimeSchema(Type type)
        {
            //Act
            var        builder = new ReflectionSchemaBuilder();
            TypeSchema schema  = builder.BuildSchema(type);


            //Assert
            Assert.IsType <UnionSchema>(schema);
            var unionSchema = (UnionSchema)schema;

            Assert.IsType <NullSchema>(unionSchema.Schemas[0]);
            Assert.IsType <TimestampMillisecondsSchema>(unionSchema.Schemas[1]);

            var resolvedSchema = (TimestampMillisecondsSchema)unionSchema.Schemas[1];

            Assert.NotNull(resolvedSchema);
        }
Ejemplo n.º 11
0
        public void BuildSchema_RecordWithAttributes_AttributesAreAppliedToSchema()
        {
            //Arrange
            var builder = new ReflectionSchemaBuilder();


            //Act
            TypeSchema schema = builder.BuildSchema(typeof(AttributeClass));


            //Assert
            Assert.IsType <RecordSchema>(schema);
            var resultSchema = (RecordSchema)schema;

            Assert.NotNull(resultSchema);
            Assert.Equal("This is Doc of User Class", resultSchema.Doc);
            Assert.Equal("User", resultSchema.Name);
            Assert.Equal("userspace", resultSchema.Namespace);

            var stringField = resultSchema.Fields.SingleOrDefault(f => f.Name == "name");

            Assert.NotNull(stringField);
            Assert.Equal("This is Doc of record field", stringField.Doc);

            var intField = resultSchema.Fields.SingleOrDefault(f => f.Name == "favorite_number");

            Assert.NotNull(intField);
            Assert.True(intField.HasDefaultValue);
            Assert.Equal(2137, intField.DefaultValue);


            var decimalField = resultSchema.Fields.SingleOrDefault(f => f.Name == nameof(AttributeClass.AvroDecimal));

            Assert.IsType <DecimalSchema>(decimalField.TypeSchema);
            var decimalSchema = (DecimalSchema)decimalField.TypeSchema;

            Assert.Equal(2, decimalSchema.Scale);
            Assert.Equal(4, decimalSchema.Precision);
        }