/// <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()); }
/// <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)); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }
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); }