Преглед на файлове

QuickProto: a hacky way of reading maps

Tim Burks преди 9 години
родител
ревизия
51eb03fdff

+ 7 - 4
Packages/QuickProto/Sources/FileDescriptor.swift

@@ -49,10 +49,6 @@ class FileDescriptor {
       let messageDescriptor = MessageDescriptor(message: field.message())
       messageDescriptors.append(messageDescriptor)
     }
-    message.forEachField(["nested_type"]) { (field) in
-      let messageDescriptor = MessageDescriptor(message: field.message())
-      messageDescriptors.append(messageDescriptor)
-    }
   }
 
   // finds and returns a descriptor for a specified message
@@ -60,6 +56,13 @@ class FileDescriptor {
     for messageDescriptor in messageDescriptors {
       if messageDescriptor.name == name {
         return messageDescriptor
+      } else {
+        for nestedMessageDescriptor in messageDescriptor.nestedTypes {
+          if nestedMessageDescriptor.name == name {
+            return nestedMessageDescriptor
+          }
+        }
+
       }
     }
     return nil

+ 5 - 0
Packages/QuickProto/Sources/MessageDescriptor.swift

@@ -36,6 +36,7 @@ import Foundation
 public class MessageDescriptor {
   var name: String = ""
   var fieldDescriptors: [FieldDescriptor] = []
+  var nestedTypes: [MessageDescriptor] = []
 
   init(message:Message) { // the message should be a DescriptorProto (descriptor.proto)
     if let field = message.oneField("name") {
@@ -45,6 +46,10 @@ public class MessageDescriptor {
       let fieldDescriptor = FieldDescriptor(message:field.message())
       fieldDescriptors.append(fieldDescriptor)
     }
+    message.forEachField("nested_type") {(field) in
+      let nestedType = MessageDescriptor(message:field.message())
+      nestedTypes.append(nestedType)
+    }
   }
 
   init(description:[String:Any]) {

+ 0 - 13
QuickProto/QuickProtoApp/AppDelegate.swift

@@ -34,27 +34,14 @@ import Cocoa
 
 @NSApplicationMain
 class AppDelegate: NSObject, NSApplicationDelegate {
-
   @IBOutlet weak var window: NSWindow!
 
-
-
   func applicationDidFinishLaunching(_ aNotification: Notification) {
-
-
     let fileDescriptorSet = FileDescriptorSet(filename: "maps.out")
-
     let messageURL = Bundle.main.url(forResource: "maptest", withExtension: "bin")!
     let messageData = try! Data(contentsOf:messageURL)
     let message = fileDescriptorSet.readMessage("MapTest", data:messageData)!
     message.display()
-
-  }
-
-  func applicationWillTerminate(_ aNotification: Notification) {
-    // Insert code here to tear down your application
   }
-
-
 }