/// <summary> /// Initializes a new instance of the <see cref="SchemaBuilder" /> class configured with /// the default list of cases. /// </summary> /// <param name="memberVisibility"> /// The binding flags the builder should use to select fields and properties. /// </param> /// <param name="enumBehavior"> /// Whether the builder should build enum schemas or integral schemas for enum types. /// </param> /// <param name="nullableReferenceTypeBehavior"> /// The behavior the builder should apply when determining nullability of reference types. /// </param> /// <param name="temporalBehavior"> /// Whether the builder should build string schemas (ISO 8601) or long schemas (timestamp /// logical types) for timestamp types. /// </param> public SchemaBuilder( BindingFlags memberVisibility = BindingFlags.Public | BindingFlags.Instance, EnumBehavior enumBehavior = EnumBehavior.Symbolic, NullableReferenceTypeBehavior nullableReferenceTypeBehavior = NullableReferenceTypeBehavior.Annotated, TemporalBehavior temporalBehavior = TemporalBehavior.Iso8601) : this(CreateDefaultCaseBuilders(memberVisibility, enumBehavior, nullableReferenceTypeBehavior, temporalBehavior)) { }
/// <summary> /// Creates the default list of case builders. /// </summary> /// <param name="memberVisibility"> /// The binding flags to use to select fields and properties. /// </param> /// <param name="enumBehavior"> /// The behavior to apply when building schemas for enum types. /// </param> /// <param name="nullableReferenceTypeBehavior"> /// The behavior to apply when determining nullability of reference types. /// </param> /// <param name="temporalBehavior"> /// The behavior to apply when building schemas for temporal types. /// </param> /// <returns> /// A list of case builders that matches most .NET <see cref="Type" />s. /// </returns> public static IEnumerable <Func <ISchemaBuilder, ISchemaBuilderCase> > CreateDefaultCaseBuilders( BindingFlags memberVisibility = BindingFlags.Public | BindingFlags.Instance, EnumBehavior enumBehavior = EnumBehavior.Symbolic, NullableReferenceTypeBehavior nullableReferenceTypeBehavior = NullableReferenceTypeBehavior.None, TemporalBehavior temporalBehavior = TemporalBehavior.Iso8601) { return(new Func <ISchemaBuilder, ISchemaBuilderCase>[] { // nullables: builder => new UnionSchemaBuilderCase(builder), // primitives: builder => new BooleanSchemaBuilderCase(), builder => new BytesSchemaBuilderCase(nullableReferenceTypeBehavior), builder => new DecimalSchemaBuilderCase(), builder => new DoubleSchemaBuilderCase(), builder => new FloatSchemaBuilderCase(), builder => new IntSchemaBuilderCase(), builder => new LongSchemaBuilderCase(), builder => new StringSchemaBuilderCase(nullableReferenceTypeBehavior), // enums: builder => new EnumSchemaBuilderCase(enumBehavior, builder), // dictionaries: builder => new MapSchemaBuilderCase(nullableReferenceTypeBehavior, builder), // enumerables: builder => new ArraySchemaBuilderCase(nullableReferenceTypeBehavior, builder), // built-ins: builder => new DurationSchemaBuilderCase(), builder => new TimestampSchemaBuilderCase(temporalBehavior), builder => new UriSchemaBuilderCase(), builder => new UuidSchemaBuilderCase(), // classes and structs: builder => new RecordSchemaBuilderCase(memberVisibility, nullableReferenceTypeBehavior, builder), }); }
/// <summary> /// Creates a new schema builder. /// </summary> /// <param name="temporalBehavior"> /// Whether the builder should build string schemas (ISO 8601) or long schemas (timestamp /// logical types) for timestamp resolutions. /// </param> /// <param name="typeResolver"> /// A resolver to retrieve type information from. If no resolver is provided, the schema /// builder will use the default <see cref="DataContractResolver" />. /// </param> public SchemaBuilder(TemporalBehavior temporalBehavior = TemporalBehavior.Iso8601, ITypeResolver?typeResolver = null) : this(CreateCaseBuilders(temporalBehavior), typeResolver) { }
/// <summary> /// Creates a default list of case builders. /// </summary> public static IEnumerable <Func <ISchemaBuilder, ISchemaBuilderCase> > CreateCaseBuilders(TemporalBehavior temporalBehavior) { return(new Func <ISchemaBuilder, ISchemaBuilderCase>[] { builder => new ArraySchemaBuilderCase(builder), builder => new BooleanSchemaBuilderCase(), builder => new BytesSchemaBuilderCase(), builder => new DecimalSchemaBuilderCase(), builder => new DoubleSchemaBuilderCase(), builder => new DurationSchemaBuilderCase(), builder => new EnumSchemaBuilderCase(builder), builder => new FloatSchemaBuilderCase(), builder => new IntSchemaBuilderCase(), builder => new LongSchemaBuilderCase(), builder => new MapSchemaBuilderCase(builder), builder => new RecordSchemaBuilderCase(builder), builder => new StringSchemaBuilderCase(), builder => new TimestampSchemaBuilderCase(temporalBehavior), builder => new UriSchemaBuilderCase(), builder => new UuidSchemaBuilderCase() }); }
/// <summary> /// Creates a new timestamp schema builder case. /// </summary> /// <param name="temporalBehavior"> /// Whether the case should build string schemas (ISO 8601) or long schemas (timestamp /// logical types). /// </param> public TimestampSchemaBuilderCase(TemporalBehavior temporalBehavior) { TemporalBehavior = temporalBehavior; }