/// <summary> /// Static function to return new instance of the fixed schema class /// </summary> /// <param name="jtok">JSON object for the fixed schema</param> /// <param name="names">list of named schema already parsed in</param> /// <param name="encspace">enclosing namespace of the fixed schema</param> /// <returns></returns> internal static FixedSchema NewInstance(JToken jtok, PropertyMap props, SchemaNames names, string encspace) { SchemaName name = NamedSchema.GetName(jtok, encspace); var aliases = NamedSchema.GetAliases(jtok, name.Space, name.EncSpace); return(new FixedSchema(name, aliases, JsonHelper.GetRequiredInteger(jtok, "size"), props, names)); }
/// <summary> /// Static function to return new instance of EnumSchema /// </summary> /// <param name="jtok">JSON object for enum schema</param> /// <param name="names">list of named schema already parsed in</param> /// <param name="encspace">enclosing namespace for the enum schema</param> /// <returns>new instance of enum schema</returns> internal static EnumSchema NewInstance(JToken jtok, PropertyMap props, SchemaNames names, string encspace) { SchemaName name = NamedSchema.GetName(jtok, encspace); var aliases = NamedSchema.GetAliases(jtok, name.Space, name.EncSpace); JArray jsymbols = jtok["symbols"] as JArray; if (null == jsymbols) { throw new SchemaParseException("Enum has no symbols: " + name); } List <string> symbols = new List <string>(); IDictionary <string, int> symbolMap = new Dictionary <string, int>(); int i = 0; foreach (JValue jsymbol in jsymbols) { string s = (string)jsymbol.Value; if (symbolMap.ContainsKey(s)) { throw new SchemaParseException("Duplicate symbol: " + s); } symbolMap[s] = i++; symbols.Add(s); } return(new EnumSchema(name, aliases, symbols, symbolMap, props, names)); }
/// <summary> /// Static function to return new instance of the record schema /// </summary> /// <param name="type">type of record schema, either record or error</param> /// <param name="jtok">JSON object for the record schema</param> /// <param name="names">list of named schema already read</param> /// <param name="encspace">enclosing namespace of the records schema</param> /// <returns>new RecordSchema object</returns> internal static RecordSchema NewInstance(Type type, JToken jtok, PropertyMap props, SchemaNames names, string encspace) { bool request = false; JToken jfields = jtok["fields"]; // normal record if (null == jfields) { jfields = jtok["request"]; // anonymous record from messages if (null != jfields) { request = true; } } if (null == jfields) { throw new SchemaParseException("'fields' cannot be null for record"); } if (jfields.Type != JTokenType.Array) { throw new SchemaParseException("'fields' not an array for record"); } var name = GetName(jtok, encspace); var aliases = NamedSchema.GetAliases(jtok, name.Space, name.EncSpace); var fields = new List <Field>(); var fieldMap = new Dictionary <string, Field>(); var fieldAliasMap = new Dictionary <string, Field>(); var result = new RecordSchema(type, name, aliases, props, fields, request, fieldMap, fieldAliasMap, names); int fieldPos = 0; foreach (JObject jfield in jfields) { string fieldName = JsonHelper.GetRequiredString(jfield, "name"); Field field = createField(jfield, fieldPos++, names, name.Namespace); // add record namespace for field look up fields.Add(field); addToFieldMap(fieldMap, fieldName, field); addToFieldMap(fieldAliasMap, fieldName, field); if (null != field.aliases) // add aliases to field lookup map so reader function will find it when writer field name appears only as an alias on the reader field { foreach (string alias in field.aliases) { addToFieldMap(fieldAliasMap, alias, field); } } } return(result); }