// Create a new field that contains the references to the indexed field private static void UpdateIndexes(protozbuffType root) { var allMessages = root.Items.OfType<messageType>().ToList(); foreach (var msg in allMessages) { if (msg.index == null) msg.index = new indexType[0]; foreach (var index in msg.index) { var indexedField = msg.field.SingleOrDefault(field => field.id == index.forField); // convert index to repeated references index.ReferenceField = new fieldType { id = index.id, modifier = modifierType.repeated, type = typeType.referenceMessage, messageType = indexedField.messageType, name = indexedField.name, @default = indexedField.@default }; if (string.IsNullOrEmpty(index.name)) { index.name = indexedField.name + "By" + index.sortBy.Capitalize(); } // TODO check that only referenceMessage types are used for index on fields var referencedFieldMessageType = allMessages.SingleOrDefault(m => m.name == index.ReferenceField.messageType); var sortingField = referencedFieldMessageType.field.SingleOrDefault(field => field.name == index.sortBy); index.SortingField = sortingField; } } }
public static void Generate(protozbuffType p, string protoFilename, string nspace) { using (var textfile = File.CreateText(protoFilename)) { Generate(p, textfile, nspace); } }
public void Visit(protozbuffType node) { _strm.WriteLine("package {0};", _namespace); foreach (IAstNode message in node.Items) { _strm.WriteLine(); message.Accept(this); } GenerateLocalMessageDescriptor(); }
private static void Check(protozbuffType root) { var allMessages = root.Items.OfType <messageType>().ToList(); var msgNames = new HashSet <string>(); foreach (var msg in allMessages) { if (!msgNames.Add(msg.name)) { Logger.Fatal("Duplicated definition for message {0}", msg.name); } } foreach (var msg in allMessages) { CheckFieldsInMsg(allMessages, msg); CheckIndexesInMsg(allMessages, msg); } }
/// <summary> /// Load an xml file from <paramref name="p"/> as an instance of protozbuff format /// </summary> /// <param name="p"></param> /// <returns></returns> public static protozbuffType Load(string p) { if (string.IsNullOrWhiteSpace(p)) { return(null); } protozbuffType rootNode = null; try { using (var file = File.OpenText(p)) { rootNode = Load(file); } } catch (FileNotFoundException f) { Logger.Fatal(f.Message); } return(rootNode); }
// Create a new field that contains the references to the indexed field private static void UpdateIndexes(protozbuffType root) { var allMessages = root.Items.OfType <messageType>().ToList(); foreach (var msg in allMessages) { if (msg.index == null) { msg.index = new indexType[0]; } foreach (var index in msg.index) { var indexedField = msg.field.SingleOrDefault(field => field.id == index.forField); // convert index to repeated references index.ReferenceField = new fieldType { id = index.id, modifier = modifierType.repeated, type = typeType.referenceMessage, messageType = indexedField.messageType, name = indexedField.name, @default = indexedField.@default }; if (string.IsNullOrEmpty(index.name)) { index.name = indexedField.name + "By" + index.sortBy.Capitalize(); } // TODO check that only referenceMessage types are used for index on fields var referencedFieldMessageType = allMessages.SingleOrDefault(m => m.name == index.ReferenceField.messageType); var sortingField = referencedFieldMessageType.field.SingleOrDefault(field => field.name == index.sortBy); index.SortingField = sortingField; } } }
private static void Check(protozbuffType root) { var allMessages = root.Items.OfType<messageType>().ToList(); var msgNames = new HashSet<string>(); foreach (var msg in allMessages) { if (!msgNames.Add(msg.name)) Logger.Fatal("Duplicated definition for message {0}", msg.name); } foreach (var msg in allMessages) { CheckFieldsInMsg(allMessages, msg); CheckIndexesInMsg(allMessages, msg); } }