     }
 }
 
+struct Property {
+    let name: String
+    let typeName: String
+
+    init(name: String, typeName: String) {
+        self.name = name
+        self.typeName = typeName
+    }
+
+    init?(structure: Structure) {
+        guard structure.kind == .varInstance,
+            let name = structure.name,
+            let typeName = structure.typeName else {
+            return nil
+        }
+
+        self.name = name
+        self.typeName = typeName
+    }
+}
+
 struct Type {
     private static var declarationKinds: [SwiftDeclarationKind] {
         return [.struct, .class, .enum, .protocol]

let injectables = types.filter { $0.inheritedTypes.contains("Injectable") }
let parameters = injectables
    .reduce([] as [String]) { parameters, injectable -> [String] in
        return parameters + injectable.fuctions.reduce([] as [String]) { parameters, function -> [String] in
            return parameters + function.parameters.reduce([] as [String]) { parameters, parameter -> [String] in
                return parameters.contains(parameter.type) ? parameters : parameters + [parameter.type]
            }
        }
    }

injectables.forEach { print($0, "\n") }
parameters.forEach { print($0, "\n") }

let blueprints = types.filter { $0.inheritedTypes.contains("ModuleBlueprint") }
print(blueprints)


    let name: String
    let kind: SwiftDeclarationKind
    let functions: [Function]
    let properties: [Property]
    let inheritedTypes: [String]

    init?(structure: Structure) {
