private JToken EncodeFixed(FixedSchema schema, GenericFixed value) { var jvalue = new JObject(); jvalue.Add("type", new JValue("fixed")); jvalue.Add("data", new JValue(value.Value)); return(jvalue); }
protected override void WriteFixed(FixedSchema es, object value, Encoder encoder) { if (value == null || !(value is GenericFixed) || !(value as GenericFixed).Schema.Equals(es)) { throw TypeMismatch(value, "fixed", "GenericFixed"); } GenericFixed ba = (GenericFixed)value; encoder.WriteFixed(ba.Value); }
protected virtual object ReadFixed(FixedSchema writerSchema, Schema readerSchema, IDecoder d) { FixedSchema rs = (FixedSchema)readerSchema; if (rs.Size != writerSchema.Size) { throw new AvroException("Size mismatch between reader and writer fixed schemas. Writer: " + writerSchema + ", reader: " + readerSchema); } object ru = new GenericFixed(rs); byte[] bb = (ru as GenericFixed).Value; d.ReadFixed(bb); return(ru); }
private static void AddFixed(XContainer parent, GenericFixed value, string name = null, string nspace = null) { var element = new XElement(XFixed); if (name != null) { element.SetAttributeValue(XName, name); } if (nspace != null) { element.SetAttributeValue(XNamespace, nspace); } //element.Value = BitConverter.ToString(value.Value).Replace("-", string.Empty).ToLowerInvariant(); element.Value = Convert.ToBase64String(value.Value); parent.Add(element); }
public void RecordGenericTest() { var enumSchema = AvroParser.ReadSchema <EnumSchema>(@"{""name"":""Avro.Test.Generic.TestEnum"",""type"":""enum"",""symbols"":[""A"",""B"",""C""]}"); var fixedSchema = AvroParser.ReadSchema <FixedSchema>(@"{""name"":""Avro.Test.Generic.TestFixed"",""type"":""fixed"",""size"":40}"); var subRecordSchema = AvroParser.ReadSchema <RecordSchema>(@"{""name"":""Avro.Test.Generic.TestSubRecord"",""type"":""record"",""fields"":[{""name"":""FieldD"",""type"":""boolean""}]}"); var recordSchema = AvroParser.ReadSchema <RecordSchema>(@"{""name"":""Avro.Test.Generic.TestRecord"",""type"":""record"",""fields"":[{""name"":""FieldA"",""type"":""int""},{""name"":""FieldB"",""type"":""string""},{""name"":""FieldC"",""type"":{""name"":""Avro.Test.Generic.TestSubRecord"",""type"":""record"",""fields"":[{""name"":""FieldD"",""type"":""boolean""}]}},{""name"":""FieldX"",""type"":{""name"":""Avro.Test.Generic.TestEnum"",""type"":""enum"",""symbols"":[""A"",""B"",""C""]}},{""name"":""TestFixed"",""type"":{""name"":""Avro.Test.Generic.TestFixed"",""type"":""fixed"",""size"":40}}]}"); var subRecordInstance = new GenericRecord(subRecordSchema); var fixedInstance = new GenericFixed(fixedSchema); var enumInstance = new GenericEnum(enumSchema, "B"); subRecordInstance["FieldD"] = false; var expectedValue = new GenericRecord(recordSchema); expectedValue["FieldA"] = 123; expectedValue["FieldB"] = "Test"; expectedValue["FieldC"] = subRecordInstance; expectedValue["FieldX"] = enumInstance; expectedValue["TestFixed"] = fixedInstance; var writer = new DatumWriter <GenericRecord>(recordSchema); var reader = new DatumReader <GenericRecord>(recordSchema, recordSchema); using (var stream = new MemoryStream()) using (var encoder = new BinaryEncoder(stream)) using (var decoder = new BinaryDecoder(stream)) { writer.Write(encoder, expectedValue); stream.Seek(0, SeekOrigin.Begin); var actualValue = reader.Read(decoder); for (int i = 0; i < expectedValue.FieldCount; i++) { Assert.AreEqual(expectedValue[i], actualValue[i]); } } }
private static GenericRecord mkRecord(object[] kv, RecordSchema s) { GenericRecord input = new GenericRecord(s); for (int i = 0; i < kv.Length; i += 2) { string fieldName = (string)kv[i]; object fieldValue = kv[i + 1]; Schema inner = s[fieldName].Schema; if (inner is EnumSchema) { GenericEnum ge = new GenericEnum(inner as EnumSchema, (string)fieldValue); fieldValue = ge; } else if (inner is FixedSchema) { GenericFixed gf = new GenericFixed(inner as FixedSchema); gf.Value = (byte[])fieldValue; fieldValue = gf; } input.Add(fieldName, fieldValue); } return(input); }
static void GenerateInteropData(string schemaPath, string outputDir) { RecordSchema schema = null; using (var reader = new StreamReader(schemaPath)) { schema = Schema.Parse(reader.ReadToEnd()) as RecordSchema; } var mapFieldSchema = (schema.Fields.Find(x => x.Name == "mapField").Schema as MapSchema).ValueSchema as RecordSchema; var mapFieldRecord0 = new GenericRecord(mapFieldSchema); var mapFieldRecord1 = new GenericRecord(mapFieldSchema); mapFieldRecord0.Add("label", "a"); mapFieldRecord1.Add("label", "cee"); var mapFieldValue = new Dictionary <string, GenericRecord> { { "a", mapFieldRecord0 }, { "bee", mapFieldRecord1 } }; var enumFieldValue = new GenericEnum(schema.Fields.Find(x => x.Name == "enumField").Schema as EnumSchema, "C"); var fixedFieldValue = new GenericFixed( schema.Fields.Find(x => x.Name == "fixedField").Schema as FixedSchema, Encoding.ASCII.GetBytes("1019181716151413")); var nodeSchema = schema.Fields.Find(x => x.Name == "recordField").Schema as RecordSchema; var recordFieldValue = new GenericRecord(nodeSchema); var innerRecordFieldValue = new GenericRecord(nodeSchema); innerRecordFieldValue.Add("label", "inner"); innerRecordFieldValue.Add("children", new GenericRecord[] { }); recordFieldValue.Add("label", "blah"); recordFieldValue.Add("children", new GenericRecord[] { innerRecordFieldValue }); GenericRecord record = new GenericRecord(schema); record.Add("intField", 12); record.Add("longField", 15234324L); record.Add("stringField", "hey"); record.Add("boolField", true); record.Add("floatField", 1234.0f); record.Add("doubleField", -1234.0); record.Add("bytesField", Encoding.UTF8.GetBytes("12312adf")); record.Add("nullField", null); record.Add("arrayField", new double[] { 5.0, 0.0, 12.0 }); record.Add("mapField", mapFieldValue); record.Add("unionField", 12.0); record.Add("enumField", enumFieldValue); record.Add("fixedField", fixedFieldValue); record.Add("recordField", recordFieldValue); var datumWriter = new GenericDatumWriter <GenericRecord>(schema); foreach (var codecName in InteropDataConstants.SupportedCodecNames) { var outputFile = "csharp.avro"; if (codecName != DataFileConstants.NullCodec) { outputFile = string.Format("csharp_{0}.avro", codecName); } var outputPath = Path.Combine(outputDir, outputFile); var codec = Codec.CreateCodecFromString(codecName); using (var dataFileWriter = DataFileWriter <GenericRecord> .OpenWriter(datumWriter, outputPath, codec)) { dataFileWriter.Append(record); } } }