blob: 7aa10c0e65a8265f751ff4b1733d304a24d20465 [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
using System.Collections.Generic;
using System.IO;
using System.Text;
using Avro.File;
using Avro.Generic;
namespace Avro.Test.Interop
{
public class InteropDataGenerator
{
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.SetMeta("user_metadata", "someByteArray");
dataFileWriter.Append(record);
}
}
}
static void Main(string[] args)
{
GenerateInteropData(args[0], args[1]);
}
}
}