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