コード例 #1
0
 /// <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))
 {
 }
コード例 #2
0
        /// <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),
            });
        }
コード例 #3
0
 /// <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)
 {
 }
コード例 #4
0
 /// <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()
     });
 }
コード例 #5
0
 /// <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;
 }