Ejemplo n.º 1
0
 /// <summary>
 /// Initializes a new instance of the <see cref="AvroEnum"/> class.
 /// </summary>
 /// <param name="schema">The schema.</param>
 public AvroEnum(Schema.Schema schema)
 {
     this.schema = schema as EnumSchema;
     if (this.schema == null)
     {
         throw new ArgumentException(string.Format(CultureInfo.InvariantCulture, "Enum schema expected."), "schema");
     }
 }
Ejemplo n.º 2
0
        /// <summary>
        ///     Builds the enumeration type schema.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="schemas">The schemas.</param>
        /// <returns>Enumeration schema.</returns>
        private TypeSchema BuildEnumTypeSchema(Type type, Dictionary <string, NamedSchema> schemas)
        {
            if (type.IsFlagEnum())
            {
                return(new LongSchema(type));
            }

            NamedSchema schema;

            if (schemas.TryGetValue(type.ToString(), out schema))
            {
                return(schema);
            }

            var attributes = this.GetNamedEntityAttributesFrom(type);
            var result     = new EnumSchema(attributes, type);

            schemas.Add(type.ToString(), result);
            return(result);
        }
        private TypeSchema BuildCore(EnumSchema w, EnumSchema r)
        {
            bool match = this.DoNamesMatch(w, r) &&
                         w.Symbols.Select((s, i) => i < r.Symbols.Count && r.Symbols[i] == s).All(m => m);

            if (!match)
            {
                return(null);
            }

            if (this.visited.ContainsKey(w))
            {
                return(this.visited[w]);
            }

            var attr   = new NamedEntityAttributes(new SchemaName(w.Name, w.Namespace), w.Aliases, w.Doc);
            var schema = new EnumSchema(attr, r.RuntimeType);

            r.Symbols.Where(s => !schema.Symbols.Contains(s)).ToList().ForEach(schema.AddSymbol);
            this.visited.Add(w, schema);
            return(schema);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="EnumTemplate"/> class.
 /// </summary>
 /// <param name="enumSchema">The enum schema.</param>
 /// <param name="userDefinedNamespace">The default namespace.</param>
 /// <param name="forceNamespace">Determines whether the UserDefinedNamespace should be used.</param>
 public EnumTemplate(EnumSchema enumSchema, string userDefinedNamespace, bool forceNamespace)
 {
     this.Schema = enumSchema;
     this.UserDefinedNamespace = userDefinedNamespace;
     this.ForceNamespace = forceNamespace;
 }
Ejemplo n.º 5
0
        /// <summary>
        /// Parses a JSON object representing an Avro enumeration to a <see cref="Microsoft.Hadoop.Avro.Schema.EnumSchema"/>.
        /// </summary>
        /// <param name="enumeration">The JSON token that represents the enumeration.</param>
        /// <param name="parent">The parent schema.</param>
        /// <param name="namedSchemas">The named schemas.</param>
        /// <returns>
        /// Instance of <see cref="TypeSchema" /> containing IR of the enumeration.
        /// </returns>
        /// <exception cref="System.Runtime.Serialization.SerializationException">Thrown when <paramref name="enumeration"/> contains invalid symbols.</exception>
        private TypeSchema ParseEnumType(JObject enumeration, NamedSchema parent, Dictionary<string, NamedSchema> namedSchemas)
        {
            var name = enumeration.RequiredProperty<string>(Token.Name);
            var nspace = this.GetNamespace(enumeration, parent, name);
            var enumName = new SchemaName(name, nspace);

            var doc = enumeration.OptionalProperty<string>(Token.Doc);
            var aliases = this.GetAliases(enumeration, enumName.Namespace);
            var attributes = new NamedEntityAttributes(enumName, aliases, doc);

            List<string> symbols = enumeration.OptionalArrayProperty(
                Token.Symbols,
                (symbol, index) =>
                {
                    if (symbol.Type != JTokenType.String)
                    {
                        throw new SerializationException(
                            string.Format(CultureInfo.InvariantCulture, "Expected an enum symbol of type string however the type of the symbol is '{0}'.", symbol.Type));
                    }
                    return (string)symbol;
                });

            Dictionary<string, string> customAttributes = enumeration.GetAttributesNotIn(StandardProperties.Enumeration);
            var result = new EnumSchema(attributes, typeof(AvroEnum), customAttributes);
            namedSchemas.Add(result.FullName, result);
            symbols.ForEach(result.AddSymbol);
            return result;
        }
 private void VisitCore(EnumSchema s)
 {
     s.Serializer = new EnumSerializer(s);
 }
        /// <summary>
        ///     Builds the enumeration type schema.
        /// </summary>
        /// <param name="type">The type.</param>
        /// <param name="schemas">The schemas.</param>
        /// <returns>Enumeration schema.</returns>
        private TypeSchema BuildEnumTypeSchema(Type type, Dictionary<string, NamedSchema> schemas)
        {
            if (type.IsFlagEnum())
            {
                return new LongSchema(type);
            }

            NamedSchema schema;
            if (schemas.TryGetValue(type.ToString(), out schema))
            {
                return schema;
            }

            var attributes = this.GetNamedEntityAttributesFrom(type);
            var result = new EnumSchema(attributes, type);
            schemas.Add(type.ToString(), result);
            return result;
        }
Ejemplo n.º 8
0
 private static string GenerateCore(EnumSchema schema, string defaultNamespace, bool forceNamespace)
 {
     return new EnumTemplate(schema, defaultNamespace, forceNamespace).TransformText();
 }
        private TypeSchema BuildCore(EnumSchema w, EnumSchema r)
        {
            bool match = this.DoNamesMatch(w, r)
                && w.Symbols.Select((s, i) => i < r.Symbols.Count && r.Symbols[i] == s).All(m => m);
            if (!match)
            {
                return null;
            }

            if (this.visited.ContainsKey(w))
            {
                return this.visited[w];
            }

            var attr = new NamedEntityAttributes(new SchemaName(w.Name, w.Namespace), w.Aliases, w.Doc);
            var schema = new EnumSchema(attr, r.RuntimeType);
            r.Symbols.Where(s => !schema.Symbols.Contains(s)).ToList().ForEach(schema.AddSymbol);
            this.visited.Add(w, schema);
            return schema;
        }
Ejemplo n.º 10
0
        /// <summary>
        /// Creates a <see cref="EnumSchema" /> instance.
        /// </summary>
        /// <param name="name">The name.</param>
        /// <param name="ns">The namespace.</param>
        /// <param name="values">The values of the enum.</param>
        /// <returns>An instance of the <see cref="EnumSchema" />.</returns>
        public static EnumSchema CreateEnumeration(string name, string ns, IEnumerable<string> values)
        {
            if (values == null)
            {
                throw new ArgumentNullException("values");
            }

            var result = new EnumSchema(new NamedEntityAttributes(new SchemaName(name, ns), new List<string>(), string.Empty), typeof(Enum));
            values.ToList().ForEach(result.AddSymbol);
            return result;
        }