From 24a1f169335a44bf637266878101e5259847c40c Mon Sep 17 00:00:00 2001 From: Cesar Date: Thu, 27 Jul 2023 16:22:30 +0200 Subject: [PATCH 1/5] feat: swift plugin init --- implementations/plugin-swift/Cargo.toml | 24 ++ .../plugin-swift/polywrap.deploy.yaml | 7 + implementations/plugin-swift/polywrap.graphql | 1 + implementations/plugin-swift/polywrap.yaml | 10 + .../__tests__/cases/000-sanity/input.graphql | 255 ++++++++++++++++++ .../cases/000-sanity/output/Module.swift | 43 +++ .../cases/000-sanity/output/Types.swift | 210 +++++++++++++++ .../plugin-swift/src/__tests__/cases/index.ts | 35 +++ .../__tests__/debug/000-sanity/expected.json | 21 ++ .../__tests__/debug/000-sanity/received.json | 21 ++ .../debug/001-module-functions/expected.json | 21 ++ .../debug/001-module-functions/received.json | 21 ++ .../debug/002-object-types/expected.json | 21 ++ .../debug/002-object-types/received.json | 21 ++ .../plugin-swift/src/__tests__/e2e.spec.ts | 62 +++++ .../plugin-swift/src/__tests__/output.ts | 80 ++++++ .../plugin-swift/src/__tests__/polywrap.yaml | 6 + .../src/helpers/array_has_length.rs | 6 + .../plugin-swift/src/helpers/array_length.rs | 6 + .../src/helpers/detect_keyword.rs | 15 ++ .../plugin-swift/src/helpers/is_keyword.rs | 24 ++ .../plugin-swift/src/helpers/is_not_first.rs | 7 + .../plugin-swift/src/helpers/is_not_last.rs | 8 + .../plugin-swift/src/helpers/mod.rs | 73 +++++ .../plugin-swift/src/helpers/pretty.rs | 6 + .../src/helpers/to_graphql_type.rs | 177 ++++++++++++ .../plugin-swift/src/helpers/to_lower.rs | 25 ++ .../plugin-swift/src/helpers/to_swift.rs | 74 +++++ .../plugin-swift/src/helpers/to_upper.rs | 27 ++ .../plugin-swift/src/helpers/util.rs | 57 ++++ implementations/plugin-swift/src/lib.rs | 46 ++++ implementations/plugin-swift/src/renderer.rs | 44 +++ .../src/templates/Module_swift.rs | 45 ++++ .../plugin-swift/src/templates/Types_swift.rs | 27 ++ 34 files changed, 1526 insertions(+) create mode 100644 implementations/plugin-swift/Cargo.toml create mode 100644 implementations/plugin-swift/polywrap.deploy.yaml create mode 100644 implementations/plugin-swift/polywrap.graphql create mode 100644 implementations/plugin-swift/polywrap.yaml create mode 100644 implementations/plugin-swift/src/__tests__/cases/000-sanity/input.graphql create mode 100644 implementations/plugin-swift/src/__tests__/cases/000-sanity/output/Module.swift create mode 100644 implementations/plugin-swift/src/__tests__/cases/000-sanity/output/Types.swift create mode 100644 implementations/plugin-swift/src/__tests__/cases/index.ts create mode 100644 implementations/plugin-swift/src/__tests__/debug/000-sanity/expected.json create mode 100644 implementations/plugin-swift/src/__tests__/debug/000-sanity/received.json create mode 100644 implementations/plugin-swift/src/__tests__/debug/001-module-functions/expected.json create mode 100644 implementations/plugin-swift/src/__tests__/debug/001-module-functions/received.json create mode 100644 implementations/plugin-swift/src/__tests__/debug/002-object-types/expected.json create mode 100644 implementations/plugin-swift/src/__tests__/debug/002-object-types/received.json create mode 100644 implementations/plugin-swift/src/__tests__/e2e.spec.ts create mode 100644 implementations/plugin-swift/src/__tests__/output.ts create mode 100644 implementations/plugin-swift/src/__tests__/polywrap.yaml create mode 100644 implementations/plugin-swift/src/helpers/array_has_length.rs create mode 100644 implementations/plugin-swift/src/helpers/array_length.rs create mode 100644 implementations/plugin-swift/src/helpers/detect_keyword.rs create mode 100644 implementations/plugin-swift/src/helpers/is_keyword.rs create mode 100644 implementations/plugin-swift/src/helpers/is_not_first.rs create mode 100644 implementations/plugin-swift/src/helpers/is_not_last.rs create mode 100644 implementations/plugin-swift/src/helpers/mod.rs create mode 100644 implementations/plugin-swift/src/helpers/pretty.rs create mode 100644 implementations/plugin-swift/src/helpers/to_graphql_type.rs create mode 100644 implementations/plugin-swift/src/helpers/to_lower.rs create mode 100644 implementations/plugin-swift/src/helpers/to_swift.rs create mode 100644 implementations/plugin-swift/src/helpers/to_upper.rs create mode 100644 implementations/plugin-swift/src/helpers/util.rs create mode 100644 implementations/plugin-swift/src/lib.rs create mode 100644 implementations/plugin-swift/src/renderer.rs create mode 100644 implementations/plugin-swift/src/templates/Module_swift.rs create mode 100644 implementations/plugin-swift/src/templates/Types_swift.rs diff --git a/implementations/plugin-swift/Cargo.toml b/implementations/plugin-swift/Cargo.toml new file mode 100644 index 00000000..19388719 --- /dev/null +++ b/implementations/plugin-swift/Cargo.toml @@ -0,0 +1,24 @@ +[package] +name = "plugin-typescript-wrap-abi-bindgen" +version = "0.1.0" +description = "Generates Swift plugin bindings from a WRAP ABI" +authors = ["Polywrap"] +repository = "https://github.com/polywrap/wrap-abi-bindgen" +license = "MIT" +edition = "2021" + +[dependencies] +polywrap-wasm-rs = { version = "~0.10.5" } +polywrap_msgpack_serde = { version = "0.0.2-beta.3" } +serde = { version = "1.0", features = ["derive"] } +serde_json = { version = "1.0.97" } +handlebars = { version = "4.3.7" } +lazy_static = { version = "1.4.0" } + +[lib] +crate-type = ["cdylib"] + +[profile.release] +opt-level = 's' +lto = true +panic = 'abort' diff --git a/implementations/plugin-swift/polywrap.deploy.yaml b/implementations/plugin-swift/polywrap.deploy.yaml new file mode 100644 index 00000000..2b9ab565 --- /dev/null +++ b/implementations/plugin-swift/polywrap.deploy.yaml @@ -0,0 +1,7 @@ +format: 0.1.0 +stages: + ipfs_deploy: + package: ipfs + uri: fs/./build + config: + gatewayUri: "https://ipfs.wrappers.io" \ No newline at end of file diff --git a/implementations/plugin-swift/polywrap.graphql b/implementations/plugin-swift/polywrap.graphql new file mode 100644 index 00000000..3704ef4a --- /dev/null +++ b/implementations/plugin-swift/polywrap.graphql @@ -0,0 +1 @@ +#import * from "wrap://ens/wraps.eth:abi-bindgen@0.1" diff --git a/implementations/plugin-swift/polywrap.yaml b/implementations/plugin-swift/polywrap.yaml new file mode 100644 index 00000000..f876132b --- /dev/null +++ b/implementations/plugin-swift/polywrap.yaml @@ -0,0 +1,10 @@ +format: 0.3.0 +project: + name: plugin-swift-wrap-abi-bindgen + type: wasm/rust +source: + module: ./Cargo.toml + schema: ./polywrap.graphql + import_abis: + - uri: wrap://ens/wraps.eth:abi-bindgen@0.1 + abi: ../../interface/polywrap.graphql diff --git a/implementations/plugin-swift/src/__tests__/cases/000-sanity/input.graphql b/implementations/plugin-swift/src/__tests__/cases/000-sanity/input.graphql new file mode 100644 index 00000000..2755c645 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/cases/000-sanity/input.graphql @@ -0,0 +1,255 @@ +### Polywrap Header START ### +scalar UInt +scalar UInt8 +scalar UInt16 +scalar UInt32 +scalar Int +scalar Int8 +scalar Int16 +scalar Int32 +scalar Bytes +scalar BigInt +scalar BigNumber +scalar JSON +scalar Map + +directive @imported( + uri: String! + namespace: String! + nativeType: String! +) on OBJECT | ENUM + +directive @imports( + types: [String!]! +) on OBJECT + +directive @capability( + type: String! + uri: String! + namespace: String! +) repeatable on OBJECT + +directive @enabled_interface on OBJECT + +directive @annotate(type: String!) on FIELD + +### Polywrap Header END ### + +type Module @imports( + types: [ + "TestImport_Module", + "TestImport_Object", + "TestImport_AnotherObject", + "TestImport_Enum", + "TestImport_Enum_Return" + ] +) @capability( + type: "getImplementations", + uri: "testimport.uri.eth", + namespace: "TestImport" +) { + moduleMethod( + str: String! + optStr: String + en: CustomEnum! + optEnum: CustomEnum + enumArray: [CustomEnum!]! + optEnumArray: [CustomEnum] + map: Map! @annotate(type: "Map!") + mapOfArr: Map! @annotate(type: "Map!") + mapOfMap: Map! @annotate(type: "Map!>!") + mapOfObj: Map! @annotate(type: "Map!") + mapOfArrOfObj: Map! @annotate(type: "Map!") + ): Int! + + objectMethod( + object: AnotherType! + optObject: AnotherType + objectArray: [AnotherType!]! + optObjectArray: [AnotherType] + ): AnotherType @env(required: true) + + optionalEnvMethod( + object: AnotherType! + optObject: AnotherType + objectArray: [AnotherType!]! + optObjectArray: [AnotherType] + ): AnotherType @env(required: false) + + if( + if: else! + ): else! +} + +type Env { + prop: String! + optProp: String + optMap: Map @annotate(type: "Map") +} + +type CustomType { + str: String! + optStr: String + u: UInt! + optU: UInt + u8: UInt8! + u16: UInt16! + u32: UInt32! + i: Int! + i8: Int8! + i16: Int16! + i32: Int32! + bigint: BigInt! + optBigint: BigInt + bignumber: BigNumber! + optBignumber: BigNumber + json: JSON! + optJson: JSON + bytes: Bytes! + optBytes: Bytes + boolean: Boolean! + optBoolean: Boolean + u_array: [UInt!]! + uOpt_array: [UInt!] + _opt_uOptArray: [UInt] + optStrOptArray: [String] + uArrayArray: [[UInt!]!]! + uOptArrayOptArray: [[UInt32]]! + uArrayOptArrayArray: [[[UInt32!]!]]! + crazyArray: [[[[UInt32!]]!]] + object: AnotherType! + optObject: AnotherType + objectArray: [AnotherType!]! + optObjectArray: [AnotherType] + en: CustomEnum! + optEnum: CustomEnum + enumArray: [CustomEnum!]! + optEnumArray: [CustomEnum] + map: Map! @annotate(type: "Map!") + mapOfArr: Map! @annotate(type: "Map!") + mapOfObj: Map! @annotate(type: "Map!") + mapOfArrOfObj: Map! @annotate(type: "Map!") + mapCustomValue: Map! @annotate(type: "Map!") +} + +type AnotherType { + prop: String + circular: CustomType + const: String +} + +enum CustomEnum { + STRING + BYTES +} + +type CustomMapValue { + foo: String! +} + +type else { + else: String! +} + +enum while { + for, + in, +} + +### Imported Modules START ### + +type TestImport_Module @imported( + uri: "testimport.uri.eth", + namespace: "TestImport", + nativeType: "Module" +) @enabled_interface { + importedMethod( + str: String! + optStr: String + u: UInt! + optU: UInt + uArrayArray: [[UInt]]! + object: TestImport_Object! + optObject: TestImport_Object + objectArray: [TestImport_Object!]! + optObjectArray: [TestImport_Object] + en: TestImport_Enum! + optEnum: TestImport_Enum + enumArray: [TestImport_Enum!]! + optEnumArray: [TestImport_Enum] + ): TestImport_Object @env(required: true) + + anotherMethod( + arg: [String!]! + ): Int32! + + returnsArrayOfEnums( + arg: String! + ): [TestImport_Enum_Return]! +} + +### Imported Modules END ### + +### Imported Objects START ### + +type TestImport_Object @imported( + uri: "testimport.uri.eth", + namespace: "TestImport", + nativeType: "Object" +) { + object: TestImport_AnotherObject! + optObject: TestImport_AnotherObject + objectArray: [TestImport_AnotherObject!]! + optObjectArray: [TestImport_AnotherObject] + en: TestImport_Enum! + optEnum: TestImport_Enum + enumArray: [TestImport_Enum!]! + optEnumArray: [TestImport_Enum] +} + +type TestImport_AnotherObject @imported( + uri: "testimport.uri.eth", + namespace: "TestImport", + nativeType: "AnotherObject" +) { + prop: String! +} + +enum TestImport_Enum @imported( + uri: "testimport.uri.eth", + namespace: "TestImport", + nativeType: "Enum" +) { + STRING + BYTES +} + +enum TestImport_Enum_Return @imported( + uri: "testimport.uri.eth", + namespace: "TestImport", + nativeType: "Enum" +) { + STRING + BYTES +} + +### Imported Objects END ### + +### Imported Envs START ### + +type TestImport_Env @imported( + uri: "testimport.uri.eth", + namespace: "TestImport", + nativeType: "Env" +) { + object: TestImport_AnotherObject! + optObject: TestImport_AnotherObject + objectArray: [TestImport_AnotherObject!]! + optObjectArray: [TestImport_AnotherObject] + en: TestImport_Enum! + optEnum: TestImport_Enum + enumArray: [TestImport_Enum!]! + optEnumArray: [TestImport_Enum] +} + +### Imported Envs END ### \ No newline at end of file diff --git a/implementations/plugin-swift/src/__tests__/cases/000-sanity/output/Module.swift b/implementations/plugin-swift/src/__tests__/cases/000-sanity/output/Module.swift new file mode 100644 index 00000000..8f3ceea0 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/cases/000-sanity/output/Module.swift @@ -0,0 +1,43 @@ +/// NOTE: This is an auto-generated file. +/// All modifications will be overwritten. + +import PolywrapClient + +struct ArgsModuleMethod: Codable { + var str: String + var optStr: String? + var en: CustomEnum + var optEnum: CustomEnum? + var enumArray: [CustomEnum] + var optEnumArray: [CustomEnum?]? + var map: [String: Int] + var mapOfArr: [String: [Int]] + var mapOfMap: [String: [String: Int]] + var mapOfObj: [String: AnotherType] + var mapOfArrOfObj: [String: [AnotherType]] +} + +struct ArgsObjectMethod: Codable { + var object: AnotherType + var optObject: AnotherType? + var objectArray: [AnotherType] + var optObjectArray: [AnotherType?]? +} + +struct ArgsOptionalEnvMethod: Codable { + var object: AnotherType + var optObject: AnotherType? + var objectArray: [AnotherType] + var optObjectArray: [AnotherType?]? +} + +struct ArgsIf: Codable { + var `if`: Else +} + +protocol Module: PluginModule { + func moduleMethod(_ args: ArgsModuleMethod, _ env: VoidCodable?, _ invoker: Invoker) throws -> Int + func objectMethod(_ args: ArgsObjectMethod, _ env: Env, _ invoker: Invoker) throws -> AnotherType? + func optionalEnvMethod(_ args: ArgsOptionalEnvMethod, _ env: Env?, _ invoker: Invoker) throws -> AnotherType? + func _if(_ args: ArgsIf, _ env: VoidCodable?, _ invoker: Invoker) throws -> Else +} diff --git a/implementations/plugin-swift/src/__tests__/cases/000-sanity/output/Types.swift b/implementations/plugin-swift/src/__tests__/cases/000-sanity/output/Types.swift new file mode 100644 index 00000000..d296e694 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/cases/000-sanity/output/Types.swift @@ -0,0 +1,210 @@ +// NOTE: This is an auto-generated file. +// All modifications will be overwritten. +import Foundation + +// Env START // + +struct Env: Codable { + var prop: String + var optProp: String? // Option in Rust, Optional in Swift + var optMap: [String: Int?]? // BTreeMap in Rust, Dictionary in Swift +} + +// Env END // + +// Objects START // + +struct CustomType: Codable { + var str: String + var optStr: String? + var u: UInt32 + var optU: UInt32? + var u8: UInt8 + var u16: UInt16 + var u32: UInt32 + var i: Int32 + var i8: Int8 + var i16: Int16 + var i32: Int32 + var bigint: String + var optBigint: String? + var bignumber: String + var optBignumber: String? + var json: String + var optJson: String? + var bytes: Data + var optBytes: Data? + var boolean: Bool + var optBoolean: Bool? + var uArray: [UInt32] + var uOptArray: [UInt32]? + var optUOptArray: [UInt32?]? + var optStrOptArray: [String?]? + var uArrayArray: [[UInt32]] + var uOptArrayOptArray: [[UInt32]?] + var uArrayOptArrayArray: [[[UInt32]]]? + var crazyArray: [[[UInt32?]]]? + var object: AnotherType + var optObject: AnotherType? + var objectArray: [AnotherType] + var optObjectArray: [AnotherType?]? + var en: CustomEnum + var optEnum: CustomEnum? + var enumArray: [CustomEnum] + var optEnumArray: [CustomEnum?]? + var map: [String: Int32] + var mapOfArr: [String: [Int32]] + var mapOfObj: [String: AnotherType] + var mapOfArrOfObj: [String: [AnotherType]] + var mapCustomValue: [String: CustomMapValue?] +} + + +struct AnotherType: Codable { + var prop: String? + var circular: CustomType? + var const: String? +} + +struct CustomMapValue { + var foo: String +} + +struct Else { + var `else`: String +} + +// Objects END // + +// Enums START // + +enum CustomEnum: String, Codable { + case STRING + case BYTES + case _MAX_ +} + +enum While: String, Codable { + case _for + case _in + case _MAX_ +} + +// Enums END // + +// Imported objects START // + +struct TestImportObject: Codable { + var object: TestImportAnotherObject + var optObject: TestImportAnotherObject? + var objectArray: [TestImportAnotherObject] + var optObjectArray: [TestImportAnotherObject?]? + var en: TestImportEnum + var optEnum: TestImportEnum? + var enumArray: [TestImportEnum] + var optEnumArray: [TestImportEnum?]? +} + +struct TestImportAnotherObject: Codable { + var prop: String +} + +// Imported objects END // + +// Imported envs START // + +// Imported envs END // + +// Imported enums START // + +enum TestImportEnum: String, Codable { + case string = "STRING" + case bytes = "BYTES" + case max = "_MAX_" +} + +enum TestImportEnumReturn: String, Codable { + case string = "STRING" + case bytes = "BYTES" + case max = "_MAX_" +} + +// Imported enums END // + +// Imported Modules START // + +// URI: "testimport.uri.eth" // +struct TestImportModuleArgsImportedMethod: Codable { + var str: String + var optStr: String? + var u: UInt32 + var optU: UInt32? + var uArrayArray: [[UInt32?]?]? + var object: TestImportObject + var optObject: TestImportObject? + var objectArray: [TestImportObject] + var optObjectArray: [TestImportObject?]? + var en: TestImportEnum + var optEnum: TestImportEnum? + var enumArray: [TestImportEnum] + var optEnumArray: [TestImportEnum?]? +} + + +// URI: "testimport.uri.eth" // +struct TestImportModuleArgsAnotherMethod: Codable { + var arg: [String] +} + + +// URI: "testimport.uri.eth" // +struct TestImportModuleArgsReturnsArrayOfEnums: Codable { + var arg: String +} + +class TestImportModule { + static let INTERFACE_URI = "testimport.uri.eth" + var uri: String + + init(uri: String) { + self.uri = uri + } + + func importedMethod(_ args: TestImportModuleArgsImportedMethod, _ env: VoidCodable?, _ invoker: Invoker) throws -> TestImportObject { + let serializedArgs = try encode(value: args) + let resultData = try invoker.invokeRaw( + uri: self.uri, + method: "importedMethod", + args: serializedArgs, + env: nil + ) + + return try decode(value: resultData) + } + + func anotherMethod(_ args: TestImportModuleArgsAnotherMethod, _ env: VoidCodable?, _ invoker: Invoker) throws -> Int { + let serializedArgs = try encode(value: args) + let resultData = try invoker.invokeRaw( + uri: self.uri, + method: "anotherMethod", + args: serializedArgs, + env: nil + ) + + return try decode(value: resultData) + } + + func returnsArrayOfEnums(_ args: TestImportModuleArgsReturnsArrayOfEnums, _ env: VoidCodable?, _ invoker: Invoker) throws -> [TestImportEnumReturn?] { + let serializedArgs = try encode(value: args) + let resultData = try invoker.invokeRaw( + uri: self.uri, + method: "returnsArrayOfEnums", + args: serializedArgs, + env: nil, + ) + + return try decode(value: resultData) + } +} + +// Imported Modules END // diff --git a/implementations/plugin-swift/src/__tests__/cases/index.ts b/implementations/plugin-swift/src/__tests__/cases/index.ts new file mode 100644 index 00000000..704f98ab --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/cases/index.ts @@ -0,0 +1,35 @@ +import { Output } from "../wrap"; +import { loadOutput } from "../output"; + +import fs from "fs"; +import path from "path"; + +export interface TestCase { + name: string; + input: string; + output: Output; +} + +export function loadTestCases(): TestCase[] { + const testCases: TestCase[] = []; + const casesDirents = fs.readdirSync(__dirname, { withFileTypes: true }); + + for (const casesDirent of casesDirents) { + if (!casesDirent.isDirectory()) { + continue; + } + + const caseDir = path.join(__dirname, casesDirent.name); + const caseInputPath = path.join(caseDir, "input.graphql"); + const caseInput = fs.readFileSync(caseInputPath, "utf-8"); + const caseOutputDir = path.join(caseDir, "output"); + const caseOutput = loadOutput(caseOutputDir, ["input.graphql"]); + testCases.push({ + name: casesDirent.name, + input: caseInput, + output: caseOutput + }); + } + + return testCases; +} diff --git a/implementations/plugin-swift/src/__tests__/debug/000-sanity/expected.json b/implementations/plugin-swift/src/__tests__/debug/000-sanity/expected.json new file mode 100644 index 00000000..8181ac60 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/debug/000-sanity/expected.json @@ -0,0 +1,21 @@ +{ + "files": [ + { + "name": "wrap.info.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\nuse polywrap_plugin::JSON::{from_value, json};\nuse wrap_manifest_schemas::versions::{WrapManifest, WrapManifestAbi};\n\npub fn get_manifest() -> WrapManifest {\n WrapManifest {\n name: \"000-sanity\".to_string(),\n type_: \"plugin\".to_string(),\n version: \"0.1\".to_string(),\n abi: from_value::(json!({\n \"enumTypes\": [\n {\n \"constants\": [\n \"STRING\",\n \"BYTES\"\n ],\n \"kind\": 8,\n \"type\": \"CustomEnum\"\n },\n {\n \"constants\": [\n \"for\",\n \"in\"\n ],\n \"kind\": 8,\n \"type\": \"while\"\n }\n ],\n \"envType\": {\n \"kind\": 65536,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"prop\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"prop\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optProp\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optProp\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"optMap\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"optMap\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optMap\",\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"optMap\",\n \"type\": \"Int\"\n }\n },\n \"name\": \"optMap\",\n \"type\": \"Map\"\n }\n ],\n \"type\": \"Env\"\n },\n \"importedEnumTypes\": [\n {\n \"constants\": [\n \"STRING\",\n \"BYTES\"\n ],\n \"kind\": 520,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Enum\",\n \"type\": \"TestImport_Enum\",\n \"uri\": \"testimport.uri.eth\"\n },\n {\n \"constants\": [\n \"STRING\",\n \"BYTES\"\n ],\n \"kind\": 520,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Enum\",\n \"type\": \"TestImport_Enum_Return\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"importedEnvTypes\": [\n {\n \"kind\": 524288,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Env\",\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"required\": true,\n \"type\": \"[TestImport_AnotherObject]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[TestImport_AnotherObject]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"type\": \"[TestImport_AnotherObject]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[TestImport_AnotherObject]\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n }\n ],\n \"type\": \"TestImport_Env\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"importedModuleTypes\": [\n {\n \"isInterface\": true,\n \"kind\": 256,\n \"methods\": [\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"str\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"str\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optStr\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStr\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"u\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optU\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optU\",\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"TestImport_Object\"\n },\n \"required\": true,\n \"type\": \"TestImport_Object\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"TestImport_Object\"\n },\n \"type\": \"TestImport_Object\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_Object\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_Object\"\n },\n \"required\": true,\n \"type\": \"[TestImport_Object]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[TestImport_Object]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_Object\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_Object\"\n },\n \"type\": \"[TestImport_Object]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[TestImport_Object]\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n }\n ],\n \"env\": {\n \"required\": true\n },\n \"kind\": 64,\n \"name\": \"importedMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"importedMethod\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"importedMethod\",\n \"type\": \"TestImport_Object\"\n },\n \"type\": \"TestImport_Object\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"arg\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 18,\n \"name\": \"arg\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"[String]\"\n },\n \"kind\": 34,\n \"name\": \"arg\",\n \"required\": true,\n \"type\": \"[String]\"\n }\n ],\n \"kind\": 64,\n \"name\": \"anotherMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"anotherMethod\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"anotherMethod\",\n \"required\": true,\n \"type\": \"Int32\"\n },\n \"type\": \"Int32\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"arg\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"kind\": 64,\n \"name\": \"returnsArrayOfEnums\",\n \"required\": true,\n \"return\": {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"returnsArrayOfEnums\",\n \"type\": \"TestImport_Enum_Return\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"returnsArrayOfEnums\",\n \"type\": \"TestImport_Enum_Return\"\n },\n \"kind\": 18,\n \"name\": \"returnsArrayOfEnums\",\n \"required\": true,\n \"type\": \"[TestImport_Enum_Return]\"\n },\n \"kind\": 34,\n \"name\": \"returnsArrayOfEnums\",\n \"required\": true,\n \"type\": \"[TestImport_Enum_Return]\"\n },\n \"type\": \"Method\"\n }\n ],\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Module\",\n \"type\": \"TestImport_Module\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"importedObjectTypes\": [\n {\n \"kind\": 1025,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Object\",\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"required\": true,\n \"type\": \"[TestImport_AnotherObject]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[TestImport_AnotherObject]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"type\": \"[TestImport_AnotherObject]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[TestImport_AnotherObject]\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n }\n ],\n \"type\": \"TestImport_Object\",\n \"uri\": \"testimport.uri.eth\"\n },\n {\n \"kind\": 1025,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"AnotherObject\",\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"prop\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"prop\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"TestImport_AnotherObject\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"interfaceTypes\": [\n {\n \"capabilities\": {\n \"getImplementations\": {\n \"enabled\": true\n }\n },\n \"kind\": 32768,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Interface\",\n \"type\": \"TestImport\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"moduleType\": {\n \"imports\": [\n {\n \"type\": \"TestImport_Module\"\n },\n {\n \"type\": \"TestImport_Object\"\n },\n {\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"type\": \"TestImport_Enum\"\n },\n {\n \"type\": \"TestImport_Enum_Return\"\n }\n ],\n \"kind\": 128,\n \"methods\": [\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"str\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"str\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optStr\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStr\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"CustomEnum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"CustomEnum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[CustomEnum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[CustomEnum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"CustomEnum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"CustomEnum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[CustomEnum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[CustomEnum]\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"map\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n }\n },\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n }\n },\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Int\"\n }\n },\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Map>\",\n \"value\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Int\"\n }\n }\n },\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Map>\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n }\n },\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n }\n },\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n }\n ],\n \"kind\": 64,\n \"name\": \"moduleMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"moduleMethod\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"moduleMethod\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Int\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[AnotherType]\"\n }\n ],\n \"env\": {\n \"required\": true\n },\n \"kind\": 64,\n \"name\": \"objectMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"objectMethod\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectMethod\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[AnotherType]\"\n }\n ],\n \"env\": {\n \"required\": false\n },\n \"kind\": 64,\n \"name\": \"optionalEnvMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"optionalEnvMethod\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optionalEnvMethod\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"if\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"if\",\n \"required\": true,\n \"type\": \"else\"\n },\n \"required\": true,\n \"type\": \"else\"\n }\n ],\n \"kind\": 64,\n \"name\": \"if\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"if\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"if\",\n \"required\": true,\n \"type\": \"else\"\n },\n \"required\": true,\n \"type\": \"else\"\n },\n \"type\": \"Method\"\n }\n ],\n \"type\": \"Module\"\n },\n \"objectTypes\": [\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"str\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"str\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optStr\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStr\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"u\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optU\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optU\",\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"u8\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u8\",\n \"required\": true,\n \"type\": \"UInt8\"\n },\n \"type\": \"UInt8\"\n },\n {\n \"kind\": 34,\n \"name\": \"u16\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u16\",\n \"required\": true,\n \"type\": \"UInt16\"\n },\n \"type\": \"UInt16\"\n },\n {\n \"kind\": 34,\n \"name\": \"u32\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u32\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"UInt32\"\n },\n {\n \"kind\": 34,\n \"name\": \"i\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Int\"\n },\n {\n \"kind\": 34,\n \"name\": \"i8\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i8\",\n \"required\": true,\n \"type\": \"Int8\"\n },\n \"type\": \"Int8\"\n },\n {\n \"kind\": 34,\n \"name\": \"i16\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i16\",\n \"required\": true,\n \"type\": \"Int16\"\n },\n \"type\": \"Int16\"\n },\n {\n \"kind\": 34,\n \"name\": \"i32\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i32\",\n \"required\": true,\n \"type\": \"Int32\"\n },\n \"type\": \"Int32\"\n },\n {\n \"kind\": 34,\n \"name\": \"bigint\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bigint\",\n \"required\": true,\n \"type\": \"BigInt\"\n },\n \"type\": \"BigInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBigint\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBigint\",\n \"type\": \"BigInt\"\n },\n \"type\": \"BigInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"bignumber\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bignumber\",\n \"required\": true,\n \"type\": \"BigNumber\"\n },\n \"type\": \"BigNumber\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBignumber\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBignumber\",\n \"type\": \"BigNumber\"\n },\n \"type\": \"BigNumber\"\n },\n {\n \"kind\": 34,\n \"name\": \"json\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"json\",\n \"required\": true,\n \"type\": \"JSON\"\n },\n \"type\": \"JSON\"\n },\n {\n \"kind\": 34,\n \"name\": \"optJson\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optJson\",\n \"type\": \"JSON\"\n },\n \"type\": \"JSON\"\n },\n {\n \"kind\": 34,\n \"name\": \"bytes\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bytes\",\n \"required\": true,\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBytes\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBytes\",\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n },\n {\n \"kind\": 34,\n \"name\": \"boolean\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"boolean\",\n \"required\": true,\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBoolean\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBoolean\",\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"u_array\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOpt_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uOpt_array\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOpt_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"uOpt_array\",\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"_opt_uOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"optStrOptArray\",\n \"type\": \"String\"\n },\n \"kind\": 18,\n \"name\": \"optStrOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStrOptArray\",\n \"type\": \"String\"\n },\n \"type\": \"[String]\"\n },\n \"kind\": 34,\n \"name\": \"optStrOptArray\",\n \"type\": \"[String]\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 34,\n \"name\": \"uOptArrayOptArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"[[[UInt32]]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"[[[UInt32]]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[UInt32]]]\"\n },\n \"item\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[UInt32]]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[[UInt32]]]]\"\n },\n \"kind\": 34,\n \"name\": \"crazyArray\",\n \"type\": \"[[[[UInt32]]]]\"\n },\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[AnotherType]\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"CustomEnum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"CustomEnum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[CustomEnum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[CustomEnum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"CustomEnum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"CustomEnum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[CustomEnum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[CustomEnum]\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"map\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n }\n },\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n }\n },\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n }\n },\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n }\n },\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapCustomValue\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapCustomValue\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapCustomValue\",\n \"type\": \"CustomMapValue\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapCustomValue\",\n \"type\": \"CustomMapValue\"\n }\n },\n \"name\": \"mapCustomValue\",\n \"required\": true,\n \"type\": \"Map\"\n }\n ],\n \"type\": \"CustomType\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"prop\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"prop\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"circular\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"circular\",\n \"type\": \"CustomType\"\n },\n \"type\": \"CustomType\"\n },\n {\n \"kind\": 34,\n \"name\": \"const\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"const\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"foo\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"foo\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"CustomMapValue\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"else\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"else\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"else\"\n }\n ],\n \"version\": \"0.1\"\n})).unwrap()\n }\n}\n" + }, + { + "name": "types.rs", + "data": "#![allow(unused_imports)]\n#![allow(non_camel_case_types)]\n\n// NOTE: This is an auto-generated file.\n// All modifications will be overwritten.\nuse bytes::ByteBuf;\nuse polywrap_core::{invoker::Invoker, uri::Uri};\nuse polywrap_plugin::error::PluginError;\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\nuse std::sync::Arc;\n\n// Env START //\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct Env {\n pub prop: String,\n #[serde(rename = \"optProp\")]\n pub opt_prop: Option,\n #[serde(rename = \"optMap\")]\n pub opt_map: Option>>,\n}\n// Env END //\n\n// Objects START //\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct CustomType {\n pub str: String,\n #[serde(rename = \"optStr\")]\n pub opt_str: Option,\n pub u: u32,\n #[serde(rename = \"optU\")]\n pub opt_u: Option,\n pub u8: u8,\n pub u16: u16,\n pub u32: u32,\n pub i: i32,\n pub i8: i8,\n pub i16: i16,\n pub i32: i32,\n #[serde(with = \"bigint\")]\n pub bigint: BigInt,\n #[serde(with = \"bigint\")]\n #[serde(rename = \"optBigint\")]\n pub opt_bigint: Option,\n pub bignumber: BigNumber,\n #[serde(rename = \"optBignumber\")]\n pub opt_bignumber: Option,\n pub json: JSONString,\n #[serde(rename = \"optJson\")]\n pub opt_json: Option,\n pub bytes: ByteBuf,\n #[serde(rename = \"optBytes\")]\n pub opt_bytes: Option,\n pub boolean: bool,\n #[serde(rename = \"optBoolean\")]\n pub opt_boolean: Option,\n pub u_array: Vec,\n #[serde(rename = \"uOpt_array\")]\n pub u_opt_array: Option>,\n #[serde(rename = \"_opt_uOptArray\")]\n pub _opt_u_opt_array: Option>>,\n #[serde(rename = \"optStrOptArray\")]\n pub opt_str_opt_array: Option>>,\n #[serde(rename = \"uArrayArray\")]\n pub u_array_array: Vec>,\n #[serde(rename = \"uOptArrayOptArray\")]\n pub u_opt_array_opt_array: Vec>>>,\n #[serde(rename = \"uArrayOptArrayArray\")]\n pub u_array_opt_array_array: Vec>>>,\n #[serde(rename = \"crazyArray\")]\n pub crazy_array: Option>>>>>>,\n pub object: AnotherType,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n pub en: CustomEnum,\n #[serde(rename = \"optEnum\")]\n pub opt_enum: Option,\n #[serde(rename = \"enumArray\")]\n pub enum_array: Vec,\n #[serde(rename = \"optEnumArray\")]\n pub opt_enum_array: Option>>,\n pub map: BTreeMap,\n #[serde(rename = \"mapOfArr\")]\n pub map_of_arr: BTreeMap>,\n #[serde(rename = \"mapOfObj\")]\n pub map_of_obj: BTreeMap,\n #[serde(rename = \"mapOfArrOfObj\")]\n pub map_of_arr_of_obj: BTreeMap>,\n #[serde(rename = \"mapCustomValue\")]\n pub map_custom_value: BTreeMap>,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct AnotherType {\n pub prop: Option,\n pub circular: Option,\n #[serde(rename = \"const\")]\n pub _const: Option,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct CustomMapValue {\n pub foo: String,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct Else {\n #[serde(rename = \"else\")]\n pub _else: String,\n}\n// Objects END //\n\n// Enums START //\n\n#[derive(Clone, Copy, Debug, Deserialize, Serialize)]\npub enum CustomEnum {\n STRING,\n BYTES,\n _MAX_\n}\n#[derive(Clone, Copy, Debug, Deserialize, Serialize)]\npub enum While {\n _for,\n _in,\n _MAX_\n}\n// Enums END //\n\n// Imported objects START //\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportObject {\n pub object: TestImportAnotherObject,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n pub en: TestImportEnum,\n #[serde(rename = \"optEnum\")]\n pub opt_enum: Option,\n #[serde(rename = \"enumArray\")]\n pub enum_array: Vec,\n #[serde(rename = \"optEnumArray\")]\n pub opt_enum_array: Option>>,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportAnotherObject {\n pub prop: String,\n}\n// Imported objects END //\n\n// Imported envs START //\n\n// Imported envs END //\n\n// Imported enums START //\n\n#[derive(Clone, Copy, Debug, Deserialize, Serialize)]\npub enum TestImportEnum {\n STRING,\n BYTES,\n _MAX_\n}\n#[derive(Clone, Copy, Debug, Deserialize, Serialize)]\npub enum TestImportEnumReturn {\n STRING,\n BYTES,\n _MAX_\n}\n// Imported enums END //\n\n// Imported Modules START //\n\n// URI: \"testimport.uri.eth\" //\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportModuleArgsImportedMethod {\n pub str: String,\n #[serde(rename = \"optStr\")]\n pub opt_str: Option,\n pub u: u32,\n #[serde(rename = \"optU\")]\n pub opt_u: Option,\n #[serde(rename = \"uArrayArray\")]\n pub u_array_array: Vec>>>,\n pub object: TestImportObject,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n pub en: TestImportEnum,\n #[serde(rename = \"optEnum\")]\n pub opt_enum: Option,\n #[serde(rename = \"enumArray\")]\n pub enum_array: Vec,\n #[serde(rename = \"optEnumArray\")]\n pub opt_enum_array: Option>>,\n}\n\n// URI: \"testimport.uri.eth\" //\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportModuleArgsAnotherMethod {\n pub arg: Vec,\n}\n\n// URI: \"testimport.uri.eth\" //\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportModuleArgsReturnsArrayOfEnums {\n pub arg: String,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportModule<'a> {\n uri: &'a str\n}\n\nimpl<'a> TestImportModule<'a> {\n pub const INTERFACE_URI: &'static str = \"testimport.uri.eth\";\n\n pub fn new(uri: &'a str) -> TestImportModule<'a> {\n TestImportModule { uri: uri }\n }\n\n pub fn imported_method(&self, args: &TestImportModuleArgsImportedMethod) -> Result, PluginError> {\n let uri = self.uri;\n let serialized_args = to_vec(args.clone()).unwrap();\n let result = invoker.invoke_raw(\n uri,\n \"importedMethod\",\n serialized_args,\n None,\n None\n )\n .map_err(|e| PluginError::SubinvocationError {\n uri: uri.to_string(),\n method: \"importedMethod\".to_string(),\n args: JSON::to_string(&args).unwrap(),\n exception: e.to_string(),\n })?;\n\n Ok(Some(from_slice(result.as_slice())?))\n }\n\n pub fn another_method(&self, args: &TestImportModuleArgsAnotherMethod) -> Result {\n let uri = self.uri;\n let serialized_args = to_vec(args.clone()).unwrap();\n let result = invoker.invoke_raw(\n uri,\n \"anotherMethod\",\n serialized_args,\n None,\n None\n )\n .map_err(|e| PluginError::SubinvocationError {\n uri: uri.to_string(),\n method: \"anotherMethod\".to_string(),\n args: JSON::to_string(&args).unwrap(),\n exception: e.to_string(),\n })?;\n\n Ok(from_slice(result.as_slice())?)\n }\n\n pub fn returns_array_of_enums(&self, args: &TestImportModuleArgsReturnsArrayOfEnums) -> Result>, PluginError> {\n let uri = self.uri;\n let serialized_args = to_vec(args.clone()).unwrap();\n let result = invoker.invoke_raw(\n uri,\n \"returnsArrayOfEnums\",\n serialized_args,\n None,\n None\n )\n .map_err(|e| PluginError::SubinvocationError {\n uri: uri.to_string(),\n method: \"returnsArrayOfEnums\".to_string(),\n args: JSON::to_string(&args).unwrap(),\n exception: e.to_string(),\n })?;\n\n Ok(from_slice(result.as_slice())?)\n }\n}\n// Imported Modules END //\n" + }, + { + "name": "module.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\nuse std::sync::Arc;\nuse bytes::ByteBuf;\nuse polywrap_core::invoker::Invoker;\nuse polywrap_plugin::{error::PluginError, module::PluginModule};\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\nuse super::types::*;\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsModuleMethod {\n pub str: String,\n #[serde(rename = \"optStr\")]\n pub opt_str: Option,\n pub en: CustomEnum,\n #[serde(rename = \"optEnum\")]\n pub opt_enum: Option,\n #[serde(rename = \"enumArray\")]\n pub enum_array: Vec,\n #[serde(rename = \"optEnumArray\")]\n pub opt_enum_array: Option>>,\n pub map: BTreeMap,\n #[serde(rename = \"mapOfArr\")]\n pub map_of_arr: BTreeMap>,\n #[serde(rename = \"mapOfMap\")]\n pub map_of_map: BTreeMap>,\n #[serde(rename = \"mapOfObj\")]\n pub map_of_obj: BTreeMap,\n #[serde(rename = \"mapOfArrOfObj\")]\n pub map_of_arr_of_obj: BTreeMap>,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsObjectMethod {\n pub object: AnotherType,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsOptionalEnvMethod {\n pub object: AnotherType,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsIf {\n #[serde(rename = \"if\")]\n pub _if: Else,\n}\n\npub trait Module: PluginModule {\n fn module_method(&mut self, args: &ArgsModuleMethod, invoker: Arc) -> Result;\n\n fn object_method(&mut self, args: &ArgsObjectMethod, invoker: Arc, env: Env) -> Result, PluginError>;\n\n fn optional_env_method(&mut self, args: &ArgsOptionalEnvMethod, invoker: Arc, env: Option) -> Result, PluginError>;\n\n fn _if(&mut self, args: &ArgsIf, invoker: Arc) -> Result;\n}\n" + }, + { + "name": "mod.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\npub mod types;\n#[path = \"wrap.info.rs\"]\npub mod wrap_info;\npub mod module;" + } + ], + "dirs": [] +} \ No newline at end of file diff --git a/implementations/plugin-swift/src/__tests__/debug/000-sanity/received.json b/implementations/plugin-swift/src/__tests__/debug/000-sanity/received.json new file mode 100644 index 00000000..8181ac60 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/debug/000-sanity/received.json @@ -0,0 +1,21 @@ +{ + "files": [ + { + "name": "wrap.info.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\nuse polywrap_plugin::JSON::{from_value, json};\nuse wrap_manifest_schemas::versions::{WrapManifest, WrapManifestAbi};\n\npub fn get_manifest() -> WrapManifest {\n WrapManifest {\n name: \"000-sanity\".to_string(),\n type_: \"plugin\".to_string(),\n version: \"0.1\".to_string(),\n abi: from_value::(json!({\n \"enumTypes\": [\n {\n \"constants\": [\n \"STRING\",\n \"BYTES\"\n ],\n \"kind\": 8,\n \"type\": \"CustomEnum\"\n },\n {\n \"constants\": [\n \"for\",\n \"in\"\n ],\n \"kind\": 8,\n \"type\": \"while\"\n }\n ],\n \"envType\": {\n \"kind\": 65536,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"prop\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"prop\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optProp\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optProp\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"optMap\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"optMap\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optMap\",\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"optMap\",\n \"type\": \"Int\"\n }\n },\n \"name\": \"optMap\",\n \"type\": \"Map\"\n }\n ],\n \"type\": \"Env\"\n },\n \"importedEnumTypes\": [\n {\n \"constants\": [\n \"STRING\",\n \"BYTES\"\n ],\n \"kind\": 520,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Enum\",\n \"type\": \"TestImport_Enum\",\n \"uri\": \"testimport.uri.eth\"\n },\n {\n \"constants\": [\n \"STRING\",\n \"BYTES\"\n ],\n \"kind\": 520,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Enum\",\n \"type\": \"TestImport_Enum_Return\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"importedEnvTypes\": [\n {\n \"kind\": 524288,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Env\",\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"required\": true,\n \"type\": \"[TestImport_AnotherObject]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[TestImport_AnotherObject]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"type\": \"[TestImport_AnotherObject]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[TestImport_AnotherObject]\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n }\n ],\n \"type\": \"TestImport_Env\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"importedModuleTypes\": [\n {\n \"isInterface\": true,\n \"kind\": 256,\n \"methods\": [\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"str\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"str\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optStr\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStr\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"u\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optU\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optU\",\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"TestImport_Object\"\n },\n \"required\": true,\n \"type\": \"TestImport_Object\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"TestImport_Object\"\n },\n \"type\": \"TestImport_Object\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_Object\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_Object\"\n },\n \"required\": true,\n \"type\": \"[TestImport_Object]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[TestImport_Object]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_Object\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_Object\"\n },\n \"type\": \"[TestImport_Object]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[TestImport_Object]\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n }\n ],\n \"env\": {\n \"required\": true\n },\n \"kind\": 64,\n \"name\": \"importedMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"importedMethod\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"importedMethod\",\n \"type\": \"TestImport_Object\"\n },\n \"type\": \"TestImport_Object\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"arg\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 18,\n \"name\": \"arg\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"[String]\"\n },\n \"kind\": 34,\n \"name\": \"arg\",\n \"required\": true,\n \"type\": \"[String]\"\n }\n ],\n \"kind\": 64,\n \"name\": \"anotherMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"anotherMethod\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"anotherMethod\",\n \"required\": true,\n \"type\": \"Int32\"\n },\n \"type\": \"Int32\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"arg\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"kind\": 64,\n \"name\": \"returnsArrayOfEnums\",\n \"required\": true,\n \"return\": {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"returnsArrayOfEnums\",\n \"type\": \"TestImport_Enum_Return\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"returnsArrayOfEnums\",\n \"type\": \"TestImport_Enum_Return\"\n },\n \"kind\": 18,\n \"name\": \"returnsArrayOfEnums\",\n \"required\": true,\n \"type\": \"[TestImport_Enum_Return]\"\n },\n \"kind\": 34,\n \"name\": \"returnsArrayOfEnums\",\n \"required\": true,\n \"type\": \"[TestImport_Enum_Return]\"\n },\n \"type\": \"Method\"\n }\n ],\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Module\",\n \"type\": \"TestImport_Module\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"importedObjectTypes\": [\n {\n \"kind\": 1025,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Object\",\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"TestImport_AnotherObject\"\n },\n \"required\": true,\n \"type\": \"[TestImport_AnotherObject]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[TestImport_AnotherObject]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"TestImport_AnotherObject\"\n },\n \"type\": \"[TestImport_AnotherObject]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[TestImport_AnotherObject]\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"TestImport_Enum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[TestImport_Enum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"TestImport_Enum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[TestImport_Enum]\"\n }\n ],\n \"type\": \"TestImport_Object\",\n \"uri\": \"testimport.uri.eth\"\n },\n {\n \"kind\": 1025,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"AnotherObject\",\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"prop\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"prop\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"TestImport_AnotherObject\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"interfaceTypes\": [\n {\n \"capabilities\": {\n \"getImplementations\": {\n \"enabled\": true\n }\n },\n \"kind\": 32768,\n \"namespace\": \"TestImport\",\n \"nativeType\": \"Interface\",\n \"type\": \"TestImport\",\n \"uri\": \"testimport.uri.eth\"\n }\n ],\n \"moduleType\": {\n \"imports\": [\n {\n \"type\": \"TestImport_Module\"\n },\n {\n \"type\": \"TestImport_Object\"\n },\n {\n \"type\": \"TestImport_AnotherObject\"\n },\n {\n \"type\": \"TestImport_Enum\"\n },\n {\n \"type\": \"TestImport_Enum_Return\"\n }\n ],\n \"kind\": 128,\n \"methods\": [\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"str\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"str\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optStr\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStr\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"CustomEnum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"CustomEnum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[CustomEnum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[CustomEnum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"CustomEnum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"CustomEnum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[CustomEnum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[CustomEnum]\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"map\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n }\n },\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n }\n },\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Int\"\n }\n },\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Map>\",\n \"value\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Int\"\n }\n }\n },\n \"name\": \"mapOfMap\",\n \"required\": true,\n \"type\": \"Map>\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n }\n },\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n }\n },\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n }\n ],\n \"kind\": 64,\n \"name\": \"moduleMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"moduleMethod\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"moduleMethod\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Int\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[AnotherType]\"\n }\n ],\n \"env\": {\n \"required\": true\n },\n \"kind\": 64,\n \"name\": \"objectMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"objectMethod\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectMethod\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[AnotherType]\"\n }\n ],\n \"env\": {\n \"required\": false\n },\n \"kind\": 64,\n \"name\": \"optionalEnvMethod\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"optionalEnvMethod\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optionalEnvMethod\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"if\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"if\",\n \"required\": true,\n \"type\": \"else\"\n },\n \"required\": true,\n \"type\": \"else\"\n }\n ],\n \"kind\": 64,\n \"name\": \"if\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"if\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"if\",\n \"required\": true,\n \"type\": \"else\"\n },\n \"required\": true,\n \"type\": \"else\"\n },\n \"type\": \"Method\"\n }\n ],\n \"type\": \"Module\"\n },\n \"objectTypes\": [\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"str\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"str\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optStr\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStr\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"u\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optU\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optU\",\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"u8\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u8\",\n \"required\": true,\n \"type\": \"UInt8\"\n },\n \"type\": \"UInt8\"\n },\n {\n \"kind\": 34,\n \"name\": \"u16\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u16\",\n \"required\": true,\n \"type\": \"UInt16\"\n },\n \"type\": \"UInt16\"\n },\n {\n \"kind\": 34,\n \"name\": \"u32\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u32\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"UInt32\"\n },\n {\n \"kind\": 34,\n \"name\": \"i\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Int\"\n },\n {\n \"kind\": 34,\n \"name\": \"i8\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i8\",\n \"required\": true,\n \"type\": \"Int8\"\n },\n \"type\": \"Int8\"\n },\n {\n \"kind\": 34,\n \"name\": \"i16\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i16\",\n \"required\": true,\n \"type\": \"Int16\"\n },\n \"type\": \"Int16\"\n },\n {\n \"kind\": 34,\n \"name\": \"i32\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i32\",\n \"required\": true,\n \"type\": \"Int32\"\n },\n \"type\": \"Int32\"\n },\n {\n \"kind\": 34,\n \"name\": \"bigint\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bigint\",\n \"required\": true,\n \"type\": \"BigInt\"\n },\n \"type\": \"BigInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBigint\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBigint\",\n \"type\": \"BigInt\"\n },\n \"type\": \"BigInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"bignumber\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bignumber\",\n \"required\": true,\n \"type\": \"BigNumber\"\n },\n \"type\": \"BigNumber\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBignumber\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBignumber\",\n \"type\": \"BigNumber\"\n },\n \"type\": \"BigNumber\"\n },\n {\n \"kind\": 34,\n \"name\": \"json\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"json\",\n \"required\": true,\n \"type\": \"JSON\"\n },\n \"type\": \"JSON\"\n },\n {\n \"kind\": 34,\n \"name\": \"optJson\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optJson\",\n \"type\": \"JSON\"\n },\n \"type\": \"JSON\"\n },\n {\n \"kind\": 34,\n \"name\": \"bytes\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bytes\",\n \"required\": true,\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBytes\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBytes\",\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n },\n {\n \"kind\": 34,\n \"name\": \"boolean\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"boolean\",\n \"required\": true,\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBoolean\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBoolean\",\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"u_array\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOpt_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uOpt_array\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOpt_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"uOpt_array\",\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"_opt_uOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"optStrOptArray\",\n \"type\": \"String\"\n },\n \"kind\": 18,\n \"name\": \"optStrOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStrOptArray\",\n \"type\": \"String\"\n },\n \"type\": \"[String]\"\n },\n \"kind\": 34,\n \"name\": \"optStrOptArray\",\n \"type\": \"[String]\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 34,\n \"name\": \"uOptArrayOptArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"[[[UInt32]]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"[[[UInt32]]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[UInt32]]]\"\n },\n \"item\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[UInt32]]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[[UInt32]]]]\"\n },\n \"kind\": 34,\n \"name\": \"crazyArray\",\n \"type\": \"[[[[UInt32]]]]\"\n },\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[AnotherType]\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"kind\": 34,\n \"name\": \"en\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnum\",\n \"type\": \"CustomEnum\"\n },\n \"kind\": 34,\n \"name\": \"optEnum\",\n \"type\": \"CustomEnum\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"CustomEnum\"\n },\n \"kind\": 18,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[CustomEnum]\"\n },\n \"kind\": 34,\n \"name\": \"enumArray\",\n \"required\": true,\n \"type\": \"[CustomEnum]\"\n },\n {\n \"array\": {\n \"enum\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"CustomEnum\"\n },\n \"item\": {\n \"kind\": 16384,\n \"name\": \"optEnumArray\",\n \"type\": \"CustomEnum\"\n },\n \"kind\": 18,\n \"name\": \"optEnumArray\",\n \"type\": \"[CustomEnum]\"\n },\n \"kind\": 34,\n \"name\": \"optEnumArray\",\n \"type\": \"[CustomEnum]\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"map\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n }\n },\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n }\n },\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n }\n },\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n }\n },\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapCustomValue\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapCustomValue\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapCustomValue\",\n \"type\": \"CustomMapValue\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapCustomValue\",\n \"type\": \"CustomMapValue\"\n }\n },\n \"name\": \"mapCustomValue\",\n \"required\": true,\n \"type\": \"Map\"\n }\n ],\n \"type\": \"CustomType\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"prop\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"prop\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"circular\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"circular\",\n \"type\": \"CustomType\"\n },\n \"type\": \"CustomType\"\n },\n {\n \"kind\": 34,\n \"name\": \"const\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"const\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"foo\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"foo\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"CustomMapValue\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"else\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"else\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"else\"\n }\n ],\n \"version\": \"0.1\"\n})).unwrap()\n }\n}\n" + }, + { + "name": "types.rs", + "data": "#![allow(unused_imports)]\n#![allow(non_camel_case_types)]\n\n// NOTE: This is an auto-generated file.\n// All modifications will be overwritten.\nuse bytes::ByteBuf;\nuse polywrap_core::{invoker::Invoker, uri::Uri};\nuse polywrap_plugin::error::PluginError;\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\nuse std::sync::Arc;\n\n// Env START //\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct Env {\n pub prop: String,\n #[serde(rename = \"optProp\")]\n pub opt_prop: Option,\n #[serde(rename = \"optMap\")]\n pub opt_map: Option>>,\n}\n// Env END //\n\n// Objects START //\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct CustomType {\n pub str: String,\n #[serde(rename = \"optStr\")]\n pub opt_str: Option,\n pub u: u32,\n #[serde(rename = \"optU\")]\n pub opt_u: Option,\n pub u8: u8,\n pub u16: u16,\n pub u32: u32,\n pub i: i32,\n pub i8: i8,\n pub i16: i16,\n pub i32: i32,\n #[serde(with = \"bigint\")]\n pub bigint: BigInt,\n #[serde(with = \"bigint\")]\n #[serde(rename = \"optBigint\")]\n pub opt_bigint: Option,\n pub bignumber: BigNumber,\n #[serde(rename = \"optBignumber\")]\n pub opt_bignumber: Option,\n pub json: JSONString,\n #[serde(rename = \"optJson\")]\n pub opt_json: Option,\n pub bytes: ByteBuf,\n #[serde(rename = \"optBytes\")]\n pub opt_bytes: Option,\n pub boolean: bool,\n #[serde(rename = \"optBoolean\")]\n pub opt_boolean: Option,\n pub u_array: Vec,\n #[serde(rename = \"uOpt_array\")]\n pub u_opt_array: Option>,\n #[serde(rename = \"_opt_uOptArray\")]\n pub _opt_u_opt_array: Option>>,\n #[serde(rename = \"optStrOptArray\")]\n pub opt_str_opt_array: Option>>,\n #[serde(rename = \"uArrayArray\")]\n pub u_array_array: Vec>,\n #[serde(rename = \"uOptArrayOptArray\")]\n pub u_opt_array_opt_array: Vec>>>,\n #[serde(rename = \"uArrayOptArrayArray\")]\n pub u_array_opt_array_array: Vec>>>,\n #[serde(rename = \"crazyArray\")]\n pub crazy_array: Option>>>>>>,\n pub object: AnotherType,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n pub en: CustomEnum,\n #[serde(rename = \"optEnum\")]\n pub opt_enum: Option,\n #[serde(rename = \"enumArray\")]\n pub enum_array: Vec,\n #[serde(rename = \"optEnumArray\")]\n pub opt_enum_array: Option>>,\n pub map: BTreeMap,\n #[serde(rename = \"mapOfArr\")]\n pub map_of_arr: BTreeMap>,\n #[serde(rename = \"mapOfObj\")]\n pub map_of_obj: BTreeMap,\n #[serde(rename = \"mapOfArrOfObj\")]\n pub map_of_arr_of_obj: BTreeMap>,\n #[serde(rename = \"mapCustomValue\")]\n pub map_custom_value: BTreeMap>,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct AnotherType {\n pub prop: Option,\n pub circular: Option,\n #[serde(rename = \"const\")]\n pub _const: Option,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct CustomMapValue {\n pub foo: String,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct Else {\n #[serde(rename = \"else\")]\n pub _else: String,\n}\n// Objects END //\n\n// Enums START //\n\n#[derive(Clone, Copy, Debug, Deserialize, Serialize)]\npub enum CustomEnum {\n STRING,\n BYTES,\n _MAX_\n}\n#[derive(Clone, Copy, Debug, Deserialize, Serialize)]\npub enum While {\n _for,\n _in,\n _MAX_\n}\n// Enums END //\n\n// Imported objects START //\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportObject {\n pub object: TestImportAnotherObject,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n pub en: TestImportEnum,\n #[serde(rename = \"optEnum\")]\n pub opt_enum: Option,\n #[serde(rename = \"enumArray\")]\n pub enum_array: Vec,\n #[serde(rename = \"optEnumArray\")]\n pub opt_enum_array: Option>>,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportAnotherObject {\n pub prop: String,\n}\n// Imported objects END //\n\n// Imported envs START //\n\n// Imported envs END //\n\n// Imported enums START //\n\n#[derive(Clone, Copy, Debug, Deserialize, Serialize)]\npub enum TestImportEnum {\n STRING,\n BYTES,\n _MAX_\n}\n#[derive(Clone, Copy, Debug, Deserialize, Serialize)]\npub enum TestImportEnumReturn {\n STRING,\n BYTES,\n _MAX_\n}\n// Imported enums END //\n\n// Imported Modules START //\n\n// URI: \"testimport.uri.eth\" //\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportModuleArgsImportedMethod {\n pub str: String,\n #[serde(rename = \"optStr\")]\n pub opt_str: Option,\n pub u: u32,\n #[serde(rename = \"optU\")]\n pub opt_u: Option,\n #[serde(rename = \"uArrayArray\")]\n pub u_array_array: Vec>>>,\n pub object: TestImportObject,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n pub en: TestImportEnum,\n #[serde(rename = \"optEnum\")]\n pub opt_enum: Option,\n #[serde(rename = \"enumArray\")]\n pub enum_array: Vec,\n #[serde(rename = \"optEnumArray\")]\n pub opt_enum_array: Option>>,\n}\n\n// URI: \"testimport.uri.eth\" //\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportModuleArgsAnotherMethod {\n pub arg: Vec,\n}\n\n// URI: \"testimport.uri.eth\" //\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportModuleArgsReturnsArrayOfEnums {\n pub arg: String,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct TestImportModule<'a> {\n uri: &'a str\n}\n\nimpl<'a> TestImportModule<'a> {\n pub const INTERFACE_URI: &'static str = \"testimport.uri.eth\";\n\n pub fn new(uri: &'a str) -> TestImportModule<'a> {\n TestImportModule { uri: uri }\n }\n\n pub fn imported_method(&self, args: &TestImportModuleArgsImportedMethod) -> Result, PluginError> {\n let uri = self.uri;\n let serialized_args = to_vec(args.clone()).unwrap();\n let result = invoker.invoke_raw(\n uri,\n \"importedMethod\",\n serialized_args,\n None,\n None\n )\n .map_err(|e| PluginError::SubinvocationError {\n uri: uri.to_string(),\n method: \"importedMethod\".to_string(),\n args: JSON::to_string(&args).unwrap(),\n exception: e.to_string(),\n })?;\n\n Ok(Some(from_slice(result.as_slice())?))\n }\n\n pub fn another_method(&self, args: &TestImportModuleArgsAnotherMethod) -> Result {\n let uri = self.uri;\n let serialized_args = to_vec(args.clone()).unwrap();\n let result = invoker.invoke_raw(\n uri,\n \"anotherMethod\",\n serialized_args,\n None,\n None\n )\n .map_err(|e| PluginError::SubinvocationError {\n uri: uri.to_string(),\n method: \"anotherMethod\".to_string(),\n args: JSON::to_string(&args).unwrap(),\n exception: e.to_string(),\n })?;\n\n Ok(from_slice(result.as_slice())?)\n }\n\n pub fn returns_array_of_enums(&self, args: &TestImportModuleArgsReturnsArrayOfEnums) -> Result>, PluginError> {\n let uri = self.uri;\n let serialized_args = to_vec(args.clone()).unwrap();\n let result = invoker.invoke_raw(\n uri,\n \"returnsArrayOfEnums\",\n serialized_args,\n None,\n None\n )\n .map_err(|e| PluginError::SubinvocationError {\n uri: uri.to_string(),\n method: \"returnsArrayOfEnums\".to_string(),\n args: JSON::to_string(&args).unwrap(),\n exception: e.to_string(),\n })?;\n\n Ok(from_slice(result.as_slice())?)\n }\n}\n// Imported Modules END //\n" + }, + { + "name": "module.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\nuse std::sync::Arc;\nuse bytes::ByteBuf;\nuse polywrap_core::invoker::Invoker;\nuse polywrap_plugin::{error::PluginError, module::PluginModule};\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\nuse super::types::*;\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsModuleMethod {\n pub str: String,\n #[serde(rename = \"optStr\")]\n pub opt_str: Option,\n pub en: CustomEnum,\n #[serde(rename = \"optEnum\")]\n pub opt_enum: Option,\n #[serde(rename = \"enumArray\")]\n pub enum_array: Vec,\n #[serde(rename = \"optEnumArray\")]\n pub opt_enum_array: Option>>,\n pub map: BTreeMap,\n #[serde(rename = \"mapOfArr\")]\n pub map_of_arr: BTreeMap>,\n #[serde(rename = \"mapOfMap\")]\n pub map_of_map: BTreeMap>,\n #[serde(rename = \"mapOfObj\")]\n pub map_of_obj: BTreeMap,\n #[serde(rename = \"mapOfArrOfObj\")]\n pub map_of_arr_of_obj: BTreeMap>,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsObjectMethod {\n pub object: AnotherType,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsOptionalEnvMethod {\n pub object: AnotherType,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsIf {\n #[serde(rename = \"if\")]\n pub _if: Else,\n}\n\npub trait Module: PluginModule {\n fn module_method(&mut self, args: &ArgsModuleMethod, invoker: Arc) -> Result;\n\n fn object_method(&mut self, args: &ArgsObjectMethod, invoker: Arc, env: Env) -> Result, PluginError>;\n\n fn optional_env_method(&mut self, args: &ArgsOptionalEnvMethod, invoker: Arc, env: Option) -> Result, PluginError>;\n\n fn _if(&mut self, args: &ArgsIf, invoker: Arc) -> Result;\n}\n" + }, + { + "name": "mod.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\npub mod types;\n#[path = \"wrap.info.rs\"]\npub mod wrap_info;\npub mod module;" + } + ], + "dirs": [] +} \ No newline at end of file diff --git a/implementations/plugin-swift/src/__tests__/debug/001-module-functions/expected.json b/implementations/plugin-swift/src/__tests__/debug/001-module-functions/expected.json new file mode 100644 index 00000000..359dd02a --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/debug/001-module-functions/expected.json @@ -0,0 +1,21 @@ +{ + "files": [ + { + "name": "wrap.info.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\nuse polywrap_plugin::JSON::{from_value, json};\nuse wrap_manifest_schemas::versions::{WrapManifest, WrapManifestAbi};\n\npub fn get_manifest() -> WrapManifest {\n WrapManifest {\n name: \"001-module-functions\".to_string(),\n type_: \"plugin\".to_string(),\n version: \"0.1\".to_string(),\n abi: from_value::(json!({\n \"moduleType\": {\n \"kind\": 128,\n \"methods\": [\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"arg1\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg1\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"UInt32\"\n },\n {\n \"kind\": 34,\n \"name\": \"arg2\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg2\",\n \"required\": true,\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n }\n ],\n \"kind\": 64,\n \"name\": \"function1\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"function1\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"function1\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"arg1\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg1\",\n \"type\": \"Int32\"\n },\n \"type\": \"Int32\"\n },\n {\n \"kind\": 34,\n \"name\": \"arg2\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg2\",\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n }\n ],\n \"kind\": 64,\n \"name\": \"function2\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"function2\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"function2\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n \"type\": \"Method\"\n }\n ],\n \"type\": \"Module\"\n },\n \"version\": \"0.1\"\n})).unwrap()\n }\n}\n" + }, + { + "name": "types.rs", + "data": "#![allow(unused_imports)]\n#![allow(non_camel_case_types)]\n\n// NOTE: This is an auto-generated file.\n// All modifications will be overwritten.\nuse bytes::ByteBuf;\nuse polywrap_core::{invoker::Invoker, uri::Uri};\nuse polywrap_plugin::error::PluginError;\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\n\n// Env START //\n\n// Env END //\n\n// Objects START //\n\n// Objects END //\n\n// Enums START //\n\n// Enums END //\n\n// Imported objects START //\n\n// Imported objects END //\n\n// Imported envs START //\n\n// Imported envs END //\n\n// Imported enums START //\n\n// Imported enums END //\n\n// Imported Modules START //\n\n// Imported Modules END //\n" + }, + { + "name": "module.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\nuse std::sync::Arc;\nuse bytes::ByteBuf;\nuse polywrap_core::invoker::Invoker;\nuse polywrap_plugin::{error::PluginError, module::PluginModule};\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\nuse super::types::*;\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsFunction1 {\n pub arg1: u32,\n pub arg2: bool,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsFunction2 {\n pub arg1: Option,\n pub arg2: Option,\n}\n\npub trait Module: PluginModule {\n fn function1(&mut self, args: &ArgsFunction1, invoker: Arc) -> Result;\n\n fn function2(&mut self, args: &ArgsFunction2, invoker: Arc) -> Result, PluginError>;\n}\n" + }, + { + "name": "mod.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\npub mod types;\n#[path = \"wrap.info.rs\"]\npub mod wrap_info;\npub mod module;" + } + ], + "dirs": [] +} \ No newline at end of file diff --git a/implementations/plugin-swift/src/__tests__/debug/001-module-functions/received.json b/implementations/plugin-swift/src/__tests__/debug/001-module-functions/received.json new file mode 100644 index 00000000..359dd02a --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/debug/001-module-functions/received.json @@ -0,0 +1,21 @@ +{ + "files": [ + { + "name": "wrap.info.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\nuse polywrap_plugin::JSON::{from_value, json};\nuse wrap_manifest_schemas::versions::{WrapManifest, WrapManifestAbi};\n\npub fn get_manifest() -> WrapManifest {\n WrapManifest {\n name: \"001-module-functions\".to_string(),\n type_: \"plugin\".to_string(),\n version: \"0.1\".to_string(),\n abi: from_value::(json!({\n \"moduleType\": {\n \"kind\": 128,\n \"methods\": [\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"arg1\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg1\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"UInt32\"\n },\n {\n \"kind\": 34,\n \"name\": \"arg2\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg2\",\n \"required\": true,\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n }\n ],\n \"kind\": 64,\n \"name\": \"function1\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"function1\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"function1\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n \"type\": \"Method\"\n },\n {\n \"arguments\": [\n {\n \"kind\": 34,\n \"name\": \"arg1\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg1\",\n \"type\": \"Int32\"\n },\n \"type\": \"Int32\"\n },\n {\n \"kind\": 34,\n \"name\": \"arg2\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"arg2\",\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n }\n ],\n \"kind\": 64,\n \"name\": \"function2\",\n \"required\": true,\n \"return\": {\n \"kind\": 34,\n \"name\": \"function2\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"function2\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n \"type\": \"Method\"\n }\n ],\n \"type\": \"Module\"\n },\n \"version\": \"0.1\"\n})).unwrap()\n }\n}\n" + }, + { + "name": "types.rs", + "data": "#![allow(unused_imports)]\n#![allow(non_camel_case_types)]\n\n// NOTE: This is an auto-generated file.\n// All modifications will be overwritten.\nuse bytes::ByteBuf;\nuse polywrap_core::{invoker::Invoker, uri::Uri};\nuse polywrap_plugin::error::PluginError;\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\n\n// Env START //\n\n// Env END //\n\n// Objects START //\n\n// Objects END //\n\n// Enums START //\n\n// Enums END //\n\n// Imported objects START //\n\n// Imported objects END //\n\n// Imported envs START //\n\n// Imported envs END //\n\n// Imported enums START //\n\n// Imported enums END //\n\n// Imported Modules START //\n\n// Imported Modules END //\n" + }, + { + "name": "module.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\nuse std::sync::Arc;\nuse bytes::ByteBuf;\nuse polywrap_core::invoker::Invoker;\nuse polywrap_plugin::{error::PluginError, module::PluginModule};\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\nuse super::types::*;\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsFunction1 {\n pub arg1: u32,\n pub arg2: bool,\n}\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct ArgsFunction2 {\n pub arg1: Option,\n pub arg2: Option,\n}\n\npub trait Module: PluginModule {\n fn function1(&mut self, args: &ArgsFunction1, invoker: Arc) -> Result;\n\n fn function2(&mut self, args: &ArgsFunction2, invoker: Arc) -> Result, PluginError>;\n}\n" + }, + { + "name": "mod.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\npub mod types;\n#[path = \"wrap.info.rs\"]\npub mod wrap_info;\npub mod module;" + } + ], + "dirs": [] +} \ No newline at end of file diff --git a/implementations/plugin-swift/src/__tests__/debug/002-object-types/expected.json b/implementations/plugin-swift/src/__tests__/debug/002-object-types/expected.json new file mode 100644 index 00000000..ea9344e5 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/debug/002-object-types/expected.json @@ -0,0 +1,21 @@ +{ + "files": [ + { + "name": "wrap.info.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\nuse polywrap_plugin::JSON::{from_value, json};\nuse wrap_manifest_schemas::versions::{WrapManifest, WrapManifestAbi};\n\npub fn get_manifest() -> WrapManifest {\n WrapManifest {\n name: \"002-object-types\".to_string(),\n type_: \"plugin\".to_string(),\n version: \"0.1\".to_string(),\n abi: from_value::(json!({\n \"objectTypes\": [\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"str\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"str\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optStr\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStr\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"u\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optU\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optU\",\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"u8\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u8\",\n \"required\": true,\n \"type\": \"UInt8\"\n },\n \"type\": \"UInt8\"\n },\n {\n \"kind\": 34,\n \"name\": \"u16\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u16\",\n \"required\": true,\n \"type\": \"UInt16\"\n },\n \"type\": \"UInt16\"\n },\n {\n \"kind\": 34,\n \"name\": \"u32\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u32\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"UInt32\"\n },\n {\n \"kind\": 34,\n \"name\": \"i\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Int\"\n },\n {\n \"kind\": 34,\n \"name\": \"i8\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i8\",\n \"required\": true,\n \"type\": \"Int8\"\n },\n \"type\": \"Int8\"\n },\n {\n \"kind\": 34,\n \"name\": \"i16\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i16\",\n \"required\": true,\n \"type\": \"Int16\"\n },\n \"type\": \"Int16\"\n },\n {\n \"kind\": 34,\n \"name\": \"i32\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i32\",\n \"required\": true,\n \"type\": \"Int32\"\n },\n \"type\": \"Int32\"\n },\n {\n \"kind\": 34,\n \"name\": \"bigint\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bigint\",\n \"required\": true,\n \"type\": \"BigInt\"\n },\n \"type\": \"BigInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBigint\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBigint\",\n \"type\": \"BigInt\"\n },\n \"type\": \"BigInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"bignumber\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bignumber\",\n \"required\": true,\n \"type\": \"BigNumber\"\n },\n \"type\": \"BigNumber\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBignumber\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBignumber\",\n \"type\": \"BigNumber\"\n },\n \"type\": \"BigNumber\"\n },\n {\n \"kind\": 34,\n \"name\": \"json\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"json\",\n \"required\": true,\n \"type\": \"JSON\"\n },\n \"type\": \"JSON\"\n },\n {\n \"kind\": 34,\n \"name\": \"optJson\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optJson\",\n \"type\": \"JSON\"\n },\n \"type\": \"JSON\"\n },\n {\n \"kind\": 34,\n \"name\": \"bytes\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bytes\",\n \"required\": true,\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBytes\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBytes\",\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n },\n {\n \"kind\": 34,\n \"name\": \"boolean\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"boolean\",\n \"required\": true,\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBoolean\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBoolean\",\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"u_array\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOpt_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uOpt_array\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOpt_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"uOpt_array\",\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"_opt_uOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"optStrOptArray\",\n \"type\": \"String\"\n },\n \"kind\": 18,\n \"name\": \"optStrOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStrOptArray\",\n \"type\": \"String\"\n },\n \"type\": \"[String]\"\n },\n \"kind\": 34,\n \"name\": \"optStrOptArray\",\n \"type\": \"[String]\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 34,\n \"name\": \"uOptArrayOptArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"[[[UInt32]]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"[[[UInt32]]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[UInt32]]]\"\n },\n \"item\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[UInt32]]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[[UInt32]]]]\"\n },\n \"kind\": 34,\n \"name\": \"crazyArray\",\n \"type\": \"[[[[UInt32]]]]\"\n },\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[AnotherType]\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"map\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n }\n },\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n }\n },\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n }\n },\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n }\n },\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapCustomValue\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapCustomValue\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapCustomValue\",\n \"type\": \"CustomMapValue\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapCustomValue\",\n \"type\": \"CustomMapValue\"\n }\n },\n \"name\": \"mapCustomValue\",\n \"required\": true,\n \"type\": \"Map\"\n }\n ],\n \"type\": \"CustomType\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"prop\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"prop\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"circular\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"circular\",\n \"type\": \"CustomType\"\n },\n \"type\": \"CustomType\"\n },\n {\n \"kind\": 34,\n \"name\": \"const\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"const\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"foo\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"foo\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"CustomMapValue\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"else\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"else\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"else\"\n }\n ],\n \"version\": \"0.1\"\n})).unwrap()\n }\n}\n" + }, + { + "name": "types.rs", + "data": "#![allow(unused_imports)]\n#![allow(non_camel_case_types)]\n\n// NOTE: This is an auto-generated file.\n// All modifications will be overwritten.\nuse bytes::ByteBuf;\nuse polywrap_core::{invoker::Invoker, uri::Uri};\nuse polywrap_plugin::error::PluginError;\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\n\n// Env START //\n\n// Env END //\n\n// Objects START //\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct CustomType {\n pub str: String,\n #[serde(rename = \"optStr\")]\n pub opt_str: Option,\n pub u: u32,\n #[serde(rename = \"optU\")]\n pub opt_u: Option,\n pub u8: u8,\n pub u16: u16,\n pub u32: u32,\n pub i: i32,\n pub i8: i8,\n pub i16: i16,\n pub i32: i32,\n #[serde(with = \"bigint\")]\n pub bigint: BigInt,\n #[serde(with = \"bigint\")]\n #[serde(rename = \"optBigint\")]\n pub opt_bigint: Option,\n pub bignumber: BigNumber,\n #[serde(rename = \"optBignumber\")]\n pub opt_bignumber: Option,\n pub json: JSONString,\n #[serde(rename = \"optJson\")]\n pub opt_json: Option,\n pub bytes: ByteBuf,\n #[serde(rename = \"optBytes\")]\n pub opt_bytes: Option,\n pub boolean: bool,\n #[serde(rename = \"optBoolean\")]\n pub opt_boolean: Option,\n pub u_array: Vec,\n #[serde(rename = \"uOpt_array\")]\n pub u_opt_array: Option>,\n #[serde(rename = \"_opt_uOptArray\")]\n pub _opt_u_opt_array: Option>>,\n #[serde(rename = \"optStrOptArray\")]\n pub opt_str_opt_array: Option>>,\n #[serde(rename = \"uArrayArray\")]\n pub u_array_array: Vec>,\n #[serde(rename = \"uOptArrayOptArray\")]\n pub u_opt_array_opt_array: Vec>>>,\n #[serde(rename = \"uArrayOptArrayArray\")]\n pub u_array_opt_array_array: Vec>>>,\n #[serde(rename = \"crazyArray\")]\n pub crazy_array: Option>>>>>>,\n pub object: AnotherType,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n pub map: BTreeMap,\n #[serde(rename = \"mapOfArr\")]\n pub map_of_arr: BTreeMap>,\n #[serde(rename = \"mapOfObj\")]\n pub map_of_obj: BTreeMap,\n #[serde(rename = \"mapOfArrOfObj\")]\n pub map_of_arr_of_obj: BTreeMap>,\n #[serde(rename = \"mapCustomValue\")]\n pub map_custom_value: BTreeMap>,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct AnotherType {\n pub prop: Option,\n pub circular: Option,\n #[serde(rename = \"const\")]\n pub _const: Option,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct CustomMapValue {\n pub foo: String,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct Else {\n #[serde(rename = \"else\")]\n pub _else: String,\n}\n// Objects END //\n\n// Enums START //\n\n// Enums END //\n\n// Imported objects START //\n\n// Imported objects END //\n\n// Imported envs START //\n\n// Imported envs END //\n\n// Imported enums START //\n\n// Imported enums END //\n\n// Imported Modules START //\n\n// Imported Modules END //\n" + }, + { + "name": "module.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\nuse std::sync::Arc;\nuse bytes::ByteBuf;\nuse polywrap_core::invoker::Invoker;\nuse polywrap_plugin::{error::PluginError, module::PluginModule};\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\nuse super::types::*;\n\npub trait Module: PluginModule {\n}\n" + }, + { + "name": "mod.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\npub mod types;\n#[path = \"wrap.info.rs\"]\npub mod wrap_info;\npub mod module;" + } + ], + "dirs": [] +} \ No newline at end of file diff --git a/implementations/plugin-swift/src/__tests__/debug/002-object-types/received.json b/implementations/plugin-swift/src/__tests__/debug/002-object-types/received.json new file mode 100644 index 00000000..ea9344e5 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/debug/002-object-types/received.json @@ -0,0 +1,21 @@ +{ + "files": [ + { + "name": "wrap.info.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\nuse polywrap_plugin::JSON::{from_value, json};\nuse wrap_manifest_schemas::versions::{WrapManifest, WrapManifestAbi};\n\npub fn get_manifest() -> WrapManifest {\n WrapManifest {\n name: \"002-object-types\".to_string(),\n type_: \"plugin\".to_string(),\n version: \"0.1\".to_string(),\n abi: from_value::(json!({\n \"objectTypes\": [\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"str\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"str\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"optStr\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStr\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"u\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optU\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optU\",\n \"type\": \"UInt\"\n },\n \"type\": \"UInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"u8\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u8\",\n \"required\": true,\n \"type\": \"UInt8\"\n },\n \"type\": \"UInt8\"\n },\n {\n \"kind\": 34,\n \"name\": \"u16\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u16\",\n \"required\": true,\n \"type\": \"UInt16\"\n },\n \"type\": \"UInt16\"\n },\n {\n \"kind\": 34,\n \"name\": \"u32\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u32\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"UInt32\"\n },\n {\n \"kind\": 34,\n \"name\": \"i\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Int\"\n },\n {\n \"kind\": 34,\n \"name\": \"i8\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i8\",\n \"required\": true,\n \"type\": \"Int8\"\n },\n \"type\": \"Int8\"\n },\n {\n \"kind\": 34,\n \"name\": \"i16\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i16\",\n \"required\": true,\n \"type\": \"Int16\"\n },\n \"type\": \"Int16\"\n },\n {\n \"kind\": 34,\n \"name\": \"i32\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"i32\",\n \"required\": true,\n \"type\": \"Int32\"\n },\n \"type\": \"Int32\"\n },\n {\n \"kind\": 34,\n \"name\": \"bigint\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bigint\",\n \"required\": true,\n \"type\": \"BigInt\"\n },\n \"type\": \"BigInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBigint\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBigint\",\n \"type\": \"BigInt\"\n },\n \"type\": \"BigInt\"\n },\n {\n \"kind\": 34,\n \"name\": \"bignumber\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bignumber\",\n \"required\": true,\n \"type\": \"BigNumber\"\n },\n \"type\": \"BigNumber\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBignumber\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBignumber\",\n \"type\": \"BigNumber\"\n },\n \"type\": \"BigNumber\"\n },\n {\n \"kind\": 34,\n \"name\": \"json\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"json\",\n \"required\": true,\n \"type\": \"JSON\"\n },\n \"type\": \"JSON\"\n },\n {\n \"kind\": 34,\n \"name\": \"optJson\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optJson\",\n \"type\": \"JSON\"\n },\n \"type\": \"JSON\"\n },\n {\n \"kind\": 34,\n \"name\": \"bytes\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"bytes\",\n \"required\": true,\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBytes\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBytes\",\n \"type\": \"Bytes\"\n },\n \"type\": \"Bytes\"\n },\n {\n \"kind\": 34,\n \"name\": \"boolean\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"boolean\",\n \"required\": true,\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n },\n {\n \"kind\": 34,\n \"name\": \"optBoolean\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optBoolean\",\n \"type\": \"Boolean\"\n },\n \"type\": \"Boolean\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"u_array\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"u_array\",\n \"required\": true,\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOpt_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uOpt_array\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOpt_array\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"uOpt_array\",\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"_opt_uOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 34,\n \"name\": \"_opt_uOptArray\",\n \"type\": \"[UInt]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"optStrOptArray\",\n \"type\": \"String\"\n },\n \"kind\": 18,\n \"name\": \"optStrOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"optStrOptArray\",\n \"type\": \"String\"\n },\n \"type\": \"[String]\"\n },\n \"kind\": 34,\n \"name\": \"optStrOptArray\",\n \"type\": \"[String]\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"UInt\"\n },\n \"type\": \"[UInt]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayArray\",\n \"required\": true,\n \"type\": \"[[UInt]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uOptArrayOptArray\",\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uOptArrayOptArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 34,\n \"name\": \"uOptArrayOptArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"[[[UInt32]]]\"\n },\n \"kind\": 34,\n \"name\": \"uArrayOptArrayArray\",\n \"required\": true,\n \"type\": \"[[[UInt32]]]\"\n },\n {\n \"array\": {\n \"array\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[UInt32]]]\"\n },\n \"item\": {\n \"array\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"item\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"item\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"UInt32\"\n },\n \"type\": \"[UInt32]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"required\": true,\n \"type\": \"[[UInt32]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[UInt32]]]\"\n },\n \"kind\": 18,\n \"name\": \"crazyArray\",\n \"type\": \"[[[[UInt32]]]]\"\n },\n \"kind\": 34,\n \"name\": \"crazyArray\",\n \"type\": \"[[[[UInt32]]]]\"\n },\n {\n \"kind\": 34,\n \"name\": \"object\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"object\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 34,\n \"name\": \"optObject\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObject\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"AnotherType\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"objectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"objectArray\",\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"optObjectArray\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"optObjectArray\",\n \"type\": \"AnotherType\"\n },\n \"type\": \"[AnotherType]\"\n },\n \"kind\": 34,\n \"name\": \"optObjectArray\",\n \"type\": \"[AnotherType]\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"map\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 4,\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Int\"\n }\n },\n \"name\": \"map\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Int\"\n },\n \"type\": \"[Int]\"\n }\n },\n \"name\": \"mapOfArr\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n }\n },\n \"name\": \"mapOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"array\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n },\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"item\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"kind\": 18,\n \"name\": \"mapOfArrOfObj\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"AnotherType\"\n },\n \"required\": true,\n \"type\": \"[AnotherType]\"\n }\n },\n \"name\": \"mapOfArrOfObj\",\n \"required\": true,\n \"type\": \"Map\"\n },\n {\n \"kind\": 34,\n \"map\": {\n \"key\": {\n \"kind\": 4,\n \"name\": \"mapCustomValue\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"kind\": 262146,\n \"name\": \"mapCustomValue\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"mapCustomValue\",\n \"type\": \"CustomMapValue\"\n },\n \"required\": true,\n \"type\": \"Map\",\n \"value\": {\n \"kind\": 8192,\n \"name\": \"mapCustomValue\",\n \"type\": \"CustomMapValue\"\n }\n },\n \"name\": \"mapCustomValue\",\n \"required\": true,\n \"type\": \"Map\"\n }\n ],\n \"type\": \"CustomType\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"prop\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"prop\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n },\n {\n \"kind\": 34,\n \"name\": \"circular\",\n \"object\": {\n \"kind\": 8192,\n \"name\": \"circular\",\n \"type\": \"CustomType\"\n },\n \"type\": \"CustomType\"\n },\n {\n \"kind\": 34,\n \"name\": \"const\",\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"const\",\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"AnotherType\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"foo\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"foo\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"CustomMapValue\"\n },\n {\n \"kind\": 1,\n \"properties\": [\n {\n \"kind\": 34,\n \"name\": \"else\",\n \"required\": true,\n \"scalar\": {\n \"kind\": 4,\n \"name\": \"else\",\n \"required\": true,\n \"type\": \"String\"\n },\n \"type\": \"String\"\n }\n ],\n \"type\": \"else\"\n }\n ],\n \"version\": \"0.1\"\n})).unwrap()\n }\n}\n" + }, + { + "name": "types.rs", + "data": "#![allow(unused_imports)]\n#![allow(non_camel_case_types)]\n\n// NOTE: This is an auto-generated file.\n// All modifications will be overwritten.\nuse bytes::ByteBuf;\nuse polywrap_core::{invoker::Invoker, uri::Uri};\nuse polywrap_plugin::error::PluginError;\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\n\n// Env START //\n\n// Env END //\n\n// Objects START //\n\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct CustomType {\n pub str: String,\n #[serde(rename = \"optStr\")]\n pub opt_str: Option,\n pub u: u32,\n #[serde(rename = \"optU\")]\n pub opt_u: Option,\n pub u8: u8,\n pub u16: u16,\n pub u32: u32,\n pub i: i32,\n pub i8: i8,\n pub i16: i16,\n pub i32: i32,\n #[serde(with = \"bigint\")]\n pub bigint: BigInt,\n #[serde(with = \"bigint\")]\n #[serde(rename = \"optBigint\")]\n pub opt_bigint: Option,\n pub bignumber: BigNumber,\n #[serde(rename = \"optBignumber\")]\n pub opt_bignumber: Option,\n pub json: JSONString,\n #[serde(rename = \"optJson\")]\n pub opt_json: Option,\n pub bytes: ByteBuf,\n #[serde(rename = \"optBytes\")]\n pub opt_bytes: Option,\n pub boolean: bool,\n #[serde(rename = \"optBoolean\")]\n pub opt_boolean: Option,\n pub u_array: Vec,\n #[serde(rename = \"uOpt_array\")]\n pub u_opt_array: Option>,\n #[serde(rename = \"_opt_uOptArray\")]\n pub _opt_u_opt_array: Option>>,\n #[serde(rename = \"optStrOptArray\")]\n pub opt_str_opt_array: Option>>,\n #[serde(rename = \"uArrayArray\")]\n pub u_array_array: Vec>,\n #[serde(rename = \"uOptArrayOptArray\")]\n pub u_opt_array_opt_array: Vec>>>,\n #[serde(rename = \"uArrayOptArrayArray\")]\n pub u_array_opt_array_array: Vec>>>,\n #[serde(rename = \"crazyArray\")]\n pub crazy_array: Option>>>>>>,\n pub object: AnotherType,\n #[serde(rename = \"optObject\")]\n pub opt_object: Option,\n #[serde(rename = \"objectArray\")]\n pub object_array: Vec,\n #[serde(rename = \"optObjectArray\")]\n pub opt_object_array: Option>>,\n pub map: BTreeMap,\n #[serde(rename = \"mapOfArr\")]\n pub map_of_arr: BTreeMap>,\n #[serde(rename = \"mapOfObj\")]\n pub map_of_obj: BTreeMap,\n #[serde(rename = \"mapOfArrOfObj\")]\n pub map_of_arr_of_obj: BTreeMap>,\n #[serde(rename = \"mapCustomValue\")]\n pub map_custom_value: BTreeMap>,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct AnotherType {\n pub prop: Option,\n pub circular: Option,\n #[serde(rename = \"const\")]\n pub _const: Option,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct CustomMapValue {\n pub foo: String,\n}\n#[derive(Clone, Debug, Deserialize, Serialize)]\npub struct Else {\n #[serde(rename = \"else\")]\n pub _else: String,\n}\n// Objects END //\n\n// Enums START //\n\n// Enums END //\n\n// Imported objects START //\n\n// Imported objects END //\n\n// Imported envs START //\n\n// Imported envs END //\n\n// Imported enums START //\n\n// Imported enums END //\n\n// Imported Modules START //\n\n// Imported Modules END //\n" + }, + { + "name": "module.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\nuse std::sync::Arc;\nuse bytes::ByteBuf;\nuse polywrap_core::invoker::Invoker;\nuse polywrap_plugin::{error::PluginError, module::PluginModule};\nuse polywrap_msgpack_serde::{\n to_vec,\n from_slice,\n BigInt,\n BigNumber,\n JSON,\n bytes,\n wrappers::{\n polywrap_bigint as bigint,\n polywrap_json as json\n },\n JSONString\n};\nuse std::collections::BTreeMap;\nuse serde::{Serialize, Deserialize};\nuse super::types::*;\n\npub trait Module: PluginModule {\n}\n" + }, + { + "name": "mod.rs", + "data": "/// NOTE: This is an auto-generated file.\n/// All modifications will be overwritten.\n\npub mod types;\n#[path = \"wrap.info.rs\"]\npub mod wrap_info;\npub mod module;" + } + ], + "dirs": [] +} \ No newline at end of file diff --git a/implementations/plugin-swift/src/__tests__/e2e.spec.ts b/implementations/plugin-swift/src/__tests__/e2e.spec.ts new file mode 100644 index 00000000..eebb7482 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/e2e.spec.ts @@ -0,0 +1,62 @@ +import { Output, WrapInfo } from "./wrap"; +import { loadTestCases, TestCase } from "./cases"; +import { orderOutput } from "./output"; + +import { PolywrapClient } from "@polywrap/client-js"; +import { parseSchema } from "@polywrap/schema-parse"; +import diff from "jest-diff"; +import path from "path"; +import fs from "fs"; + +jest.setTimeout(60000); + +describe("e2e", () => { + + const client: PolywrapClient = new PolywrapClient(); + let wrapperUri: string; + let testCases: TestCase[] = loadTestCases(); + + beforeAll(() => { + // Cache wrap URI in build dir + const dirname: string = path.resolve(__dirname); + const wrapperPath: string = path.join(dirname, "..", ".."); + wrapperUri = `fs/${wrapperPath}/build`; + }); + + for (const testCase of testCases) { + it(testCase.name, async () => { + const abi = parseSchema(testCase.input); + + const wrapInfo: WrapInfo = { + version: "0.1", + name: testCase.name, + type: "plugin", + abi: JSON.stringify(abi), + } + + const result = await client.invoke({ + uri: wrapperUri, + method: "generateBindings", + args: { wrapInfo } + }); + + if (!result.ok) fail(result.error); + + const received = orderOutput(result.value); + const expected = orderOutput(testCase.output); + + const debugDir = path.join(__dirname, "debug", testCase.name); + const receivedPath = path.join(debugDir, "received.json"); + const expectedPath = path.join(debugDir, "expected.json"); + fs.mkdirSync(debugDir, { recursive: true }); + fs.writeFileSync(receivedPath, JSON.stringify(received, null, 2)); + fs.writeFileSync(expectedPath, JSON.stringify(expected, null, 2)); + + const differences = diff(expected, received, { expand: false }); + + if (differences && !differences.includes("Compared values have no visual difference")) { + fail(differences); + } + }); + } +}); diff --git a/implementations/plugin-swift/src/__tests__/output.ts b/implementations/plugin-swift/src/__tests__/output.ts new file mode 100644 index 00000000..d0d8b12e --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/output.ts @@ -0,0 +1,80 @@ +import { Output, File, Directory } from "./wrap"; + +import fs from "fs"; +import path from "path"; + +export function orderOutput(output: Output): Output { + orderDirectory(output); + return output; +} + +function orderDirectory(directory: Output | Directory): void { + directory.dirs.sort((a, b) => a.name > b.name ? -1 : 1); + directory.files.sort((a, b) => a.name > b.name ? -1 : 1); + for (const dir of directory.dirs) { + orderDirectory(dir); + } +} + +export function loadOutput(dir: string, ignore: string[]): Output { + const output: Output = { + files: [], + dirs: [] + }; + + const outputDirents = fs.readdirSync(dir, { withFileTypes: true }); + + for (const outputDirent of outputDirents) { + if (ignore.includes(outputDirent.name)) { + continue; + } + + if (outputDirent.isDirectory()) { + output.dirs.push(loadDirectory(dir, outputDirent.name, ignore)); + } else { + output.files.push(loadFile(dir, outputDirent.name)); + } + } + + return output; +} + +function loadFile(dir: string, name: string): File { + const filePath = path.join(dir, name); + const fileData = fs.readFileSync(filePath, "utf-8"); + return { + name: name, + data: fileData + }; +} + +function loadDirectory(dir: string, name: string, ignore: string[]): Directory { + const directory: Directory = { + name: name, + files: [], + dirs: [] + }; + const directoryPath = path.join(dir, name); + const directoryEnts = fs.readdirSync( + directoryPath, + { withFileTypes: true } + ); + + for (const directoryEnt of directoryEnts) { + if (ignore.includes(directoryEnt.name)) { + continue; + } + + if (directoryEnt.isDirectory()) { + directory.dirs.push( + loadDirectory(directoryPath, directoryEnt.name, ignore) + ); + } else { + directory.files.push( + loadFile(directoryPath, directoryEnt.name) + ); + } + } + + return directory; +} diff --git a/implementations/plugin-swift/src/__tests__/polywrap.yaml b/implementations/plugin-swift/src/__tests__/polywrap.yaml new file mode 100644 index 00000000..655f8c41 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/polywrap.yaml @@ -0,0 +1,6 @@ +format: 0.3.0 +project: + name: test-types + type: app/typescript +source: + schema: ../../../../interface/polywrap.graphql diff --git a/implementations/plugin-swift/src/helpers/array_has_length.rs b/implementations/plugin-swift/src/helpers/array_has_length.rs new file mode 100644 index 00000000..e24aa2dc --- /dev/null +++ b/implementations/plugin-swift/src/helpers/array_has_length.rs @@ -0,0 +1,6 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; + +handlebars_helper!(array_has_length: |arr: Value| { + arr.is_array() && arr.as_array().unwrap().len() > 0 +}); diff --git a/implementations/plugin-swift/src/helpers/array_length.rs b/implementations/plugin-swift/src/helpers/array_length.rs new file mode 100644 index 00000000..75819d16 --- /dev/null +++ b/implementations/plugin-swift/src/helpers/array_length.rs @@ -0,0 +1,6 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; + +handlebars_helper!(array_length: |arr: Value| { + arr.as_array().unwrap().len() +}); diff --git a/implementations/plugin-swift/src/helpers/detect_keyword.rs b/implementations/plugin-swift/src/helpers/detect_keyword.rs new file mode 100644 index 00000000..df90e81e --- /dev/null +++ b/implementations/plugin-swift/src/helpers/detect_keyword.rs @@ -0,0 +1,15 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; +use crate::helpers::is_keyword::_is_keyword; + +handlebars_helper!(detect_keyword: |val: Value| { + let type_val = val.as_str().unwrap(); + _detect_keyword(type_val) +}); + +pub fn _detect_keyword(type_val: &str) -> String { + if _is_keyword(type_val) { + return format!("_{}", type_val); + } + type_val.to_string() +} \ No newline at end of file diff --git a/implementations/plugin-swift/src/helpers/is_keyword.rs b/implementations/plugin-swift/src/helpers/is_keyword.rs new file mode 100644 index 00000000..39ea1da4 --- /dev/null +++ b/implementations/plugin-swift/src/helpers/is_keyword.rs @@ -0,0 +1,24 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; + +handlebars_helper!(is_keyword: |val: Value| { + let s = val.as_str().unwrap(); + _is_keyword(s) +}); + +pub fn _is_keyword(s: &str) -> bool { + match s { + "as" | "break" | "const" | "continue" | "crate" + | "else" | "enum" | "extern" | "false" | "fn" + | "for" | "if" | "impl" | "in" | "let" | "loop" + | "match" | "mod" | "move" | "mut" | "pub" | "ref" + | "return" | "self" | "Self" | "static" | "struct" | "super" + | "trait" | "true" | "type" | "unsafe" | "use" | "where" + | "while" | "async" | "await" | "dyn" | "abstract" + | "become" | "box" | "Box" | "do" | "final" | "macro" + | "override" | "priv" | "typeof" | "unsized" + | "virtual" | "yield" | "try" | "macro_rules" + | "union" => true, + _ => false, + } +} diff --git a/implementations/plugin-swift/src/helpers/is_not_first.rs b/implementations/plugin-swift/src/helpers/is_not_first.rs new file mode 100644 index 00000000..3a6b8957 --- /dev/null +++ b/implementations/plugin-swift/src/helpers/is_not_first.rs @@ -0,0 +1,7 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; + +handlebars_helper!(is_not_first: |index: Value| { + let index_u64 = index.as_u64().unwrap(); + index_u64 != 0 +}); diff --git a/implementations/plugin-swift/src/helpers/is_not_last.rs b/implementations/plugin-swift/src/helpers/is_not_last.rs new file mode 100644 index 00000000..be543cf4 --- /dev/null +++ b/implementations/plugin-swift/src/helpers/is_not_last.rs @@ -0,0 +1,8 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; + +handlebars_helper!(is_not_last: |index: Value, array: Value| { + let index_u64 = index.as_u64().unwrap(); + let array_len = array.as_array().unwrap().len() as u64; + array_len != (index_u64 + 1) +}); diff --git a/implementations/plugin-swift/src/helpers/mod.rs b/implementations/plugin-swift/src/helpers/mod.rs new file mode 100644 index 00000000..8adacf0e --- /dev/null +++ b/implementations/plugin-swift/src/helpers/mod.rs @@ -0,0 +1,73 @@ +use handlebars::Handlebars; + +mod array_has_length; +mod array_length; +mod detect_keyword; +mod is_keyword; +mod is_not_first; +mod is_not_last; +mod pretty; +mod serde_annotate_if_bytes; +mod serde_rename_if_case_mismatch; +mod to_graphql_type; +mod to_lower; +mod to_upper; +mod to_rust; + +// helpers for helpers +mod util; + +pub fn register(handlebars: &mut Handlebars) -> () { + handlebars.register_helper( + "array_has_length", + Box::new(array_has_length::array_has_length) + ); + handlebars.register_helper( + "array_length", + Box::new(array_length::array_length) + ); + handlebars.register_helper( + "detect_keyword", + Box::new(detect_keyword::detect_keyword) + ); + handlebars.register_helper( + "is_keyword", + Box::new(is_keyword::is_keyword) + ); + handlebars.register_helper( + "is_not_first", + Box::new(is_not_first::is_not_first) + ); + handlebars.register_helper( + "is_not_last", + Box::new(is_not_last::is_not_last) + ); + handlebars.register_helper( + "pretty", + Box::new(pretty::pretty) + ); + handlebars.register_helper( + "serde_annotate_if_bytes", + Box::new(serde_annotate_if_bytes::serde_annotate_if_bytes) + ); + handlebars.register_helper( + "serde_rename_if_case_mismatch", + Box::new(serde_rename_if_case_mismatch::serde_rename_if_case_mismatch) + ); + handlebars.register_helper( + "to_graphql_type", + Box::new(to_graphql_type::to_graphql_type) + ); + handlebars.register_helper( + "to_lower", + Box::new(to_lower::to_lower) + ); + handlebars.register_helper( + "to_upper", + Box::new(to_upper::to_upper) + ); + handlebars.register_helper( + "to_rust", + Box::new(to_rust::to_rust) + ); +} diff --git a/implementations/plugin-swift/src/helpers/pretty.rs b/implementations/plugin-swift/src/helpers/pretty.rs new file mode 100644 index 00000000..1c6e6e92 --- /dev/null +++ b/implementations/plugin-swift/src/helpers/pretty.rs @@ -0,0 +1,6 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; + +handlebars_helper!(pretty: |value: Value| { + serde_json::to_string_pretty(&value).unwrap() +}); diff --git a/implementations/plugin-swift/src/helpers/to_graphql_type.rs b/implementations/plugin-swift/src/helpers/to_graphql_type.rs new file mode 100644 index 00000000..e7fb171c --- /dev/null +++ b/implementations/plugin-swift/src/helpers/to_graphql_type.rs @@ -0,0 +1,177 @@ +use handlebars::handlebars_helper; +use serde_json::{Value, Map}; + +#[derive(Debug)] +pub enum DefinitionKind { + Generic = 0, + Object = 1 << 0, + Any = 1 << 1, + Scalar = 1 << 2, + Enum = 1 << 3, + Array = ((1 << 4) as u32 | DefinitionKind::Any as u32) as isize, + Property = ((1 << 5) as u32 | DefinitionKind::Any as u32) as isize, + Method = 1 << 6, + Module = 1 << 7, + ImportedModule = 1 << 8, + ImportedEnum = ((1 << 9) as u32 | DefinitionKind::Enum as u32) as isize, + ImportedObject = ((1 << 10) as u32 | DefinitionKind::Object as u32) as isize, + InterfaceImplemented = 1 << 11, + UnresolvedObjectOrEnum = 1 << 12, + ObjectRef = 1 << 13, + EnumRef = 1 << 14, + Interface = 1 << 15, + Env = 1 << 16, + MapKey = 1 << 17, + Map = ((1 << 18) as u32 | DefinitionKind::Any as u32) as isize, + ImportedEnv = 1 << 19, +} + +impl From for DefinitionKind { + fn from(value: u32) -> Self { + match value { + v if v == Self::Generic as u32 => Self::Generic, + v if v == Self::Object as u32 => Self::Object, + v if v == Self::Any as u32 => Self::Any, + v if v == Self::Scalar as u32 => Self::Scalar, + v if v == Self::Enum as u32 => Self::Enum, + v if v == Self::Array as u32 => Self::Array, + v if v == Self::Property as u32 => Self::Property, + v if v == Self::Method as u32 => Self::Method, + v if v == Self::Module as u32 => Self::Module, + v if v == Self::ImportedModule as u32 => Self::ImportedModule, + v if v == Self::ImportedEnum as u32 => Self::ImportedEnum, + v if v == Self::ImportedObject as u32 => Self::ImportedObject, + v if v == Self::InterfaceImplemented as u32 => Self::InterfaceImplemented, + v if v == Self::UnresolvedObjectOrEnum as u32 => Self::UnresolvedObjectOrEnum, + v if v == Self::ObjectRef as u32 => Self::ObjectRef, + v if v == Self::EnumRef as u32 => Self::EnumRef, + v if v == Self::Interface as u32 => Self::Interface, + v if v == Self::Env as u32 => Self::Env, + v if v == Self::MapKey as u32 => Self::MapKey, + v if v == Self::Map as u32 => Self::Map, + v if v == Self::ImportedEnv as u32 => Self::ImportedEnv, + _ => panic!("Invalid value for DefinitionKind"), + } + } +} + +fn apply_required(type_str: &str, required: bool) -> String { + format!("{}{}", type_str, match required { + true => "!", + false => "" + }) +} + +fn any_to_graphql(any: &Map, prefixed: bool) -> String { + if let Some(object) = any.get("object") { + return to_graphql_type_fn(object.as_object().unwrap(), prefixed); + } else if let Some(array) = any.get("array") { + return to_graphql_type_fn(array.as_object().unwrap(), prefixed); + } else if let Some(scalar) = any.get("scalar") { + return to_graphql_type_fn(scalar.as_object().unwrap(), prefixed); + } else if let Some(enum_value) = any.get("enum") { + return to_graphql_type_fn(enum_value.as_object().unwrap(), prefixed); + } else if let Some(map) = any.get("map") { + return to_graphql_type_fn(map.as_object().unwrap(), prefixed); + } else { + panic!("anyToGraphQL: Any type is invalid."); + } +} + +pub fn to_graphql_type_fn(obj: &Map, prefixed: bool) -> String { + let type_str = obj.get("type").unwrap().as_str().unwrap(); + let required = match obj.get("required") { + Some(x) => x.as_bool().unwrap(), + None => false + }; + let kind = DefinitionKind::from(obj.get("kind").unwrap().as_u64().unwrap() as u32); + + match kind { + DefinitionKind::Object + | DefinitionKind::ObjectRef + | DefinitionKind::Scalar + | DefinitionKind::ImportedObject => apply_required(type_str, required), + DefinitionKind::Enum + | DefinitionKind::EnumRef + | DefinitionKind::ImportedEnum => { + if prefixed { + apply_required(format!("Enum_{}", type_str).as_str(), required) + } else { + apply_required(type_str, required) + } + } + DefinitionKind::Any | DefinitionKind::Property => { + any_to_graphql(obj, prefixed) + } + DefinitionKind::Array => { + if let Some(item) = obj.get("item") { + apply_required(format!("[{}]", to_graphql_type_fn(item.as_object().unwrap(), prefixed)).as_str(), required) + } else { + panic!( + "toGraphQL: ArrayDefinition's item type is undefined.\n{:?}", + obj + ); + } + } + DefinitionKind::Map => { + if let Some(key) = obj.get("key") { + if let Some(value) = obj.get("value") { + apply_required( + format!( + "Map<{}, {}>", + to_graphql_type_fn(key.as_object().unwrap(), prefixed), + to_graphql_type_fn(value.as_object().unwrap(), prefixed) + ).as_str(), + required, + ) + } else { + panic!( + "toGraphQL: MapDefinition's value type is undefined.\n{:?}", + obj + ); + } + } else { + panic!( + "toGraphQL: MapDefinition's key type is undefined.\n{:?}", + obj + ); + } + } + DefinitionKind::Method => { + if let Some(return_type) = obj.get("returnType") { + let arguments = obj.get("arguments").unwrap(); + let result = format!( + "{}(\n {}\n): {}", + obj.get("name").unwrap().as_str().unwrap(), + arguments + .as_array().unwrap() + .into_iter() + .map(|arg| { + let arg_obj = arg.as_object().unwrap(); + format!("{}: {}", arg_obj.get("name").unwrap().as_str().unwrap(), to_graphql_type_fn(arg_obj, prefixed)) + }) + .collect::>() + .join("\n "), + to_graphql_type_fn(return_type.as_object().unwrap(), prefixed) + ); + result + } else { + panic!( + "toGraphQL: MethodDefinition's return type is undefined.\n{:?}", + obj + ); + } + } + DefinitionKind::Module => obj.get("type").unwrap().as_str().unwrap().to_string(), + DefinitionKind::ImportedModule => obj.get("type").unwrap().as_str().unwrap().to_string(), + _ => panic!( + "toGraphQL: Unrecognized DefinitionKind.\n{:?}", + obj + ), + } +} + +handlebars_helper!(to_graphql_type: |value: Value| { + let obj = value.as_object().unwrap(); + to_graphql_type_fn(&obj, true) +}); diff --git a/implementations/plugin-swift/src/helpers/to_lower.rs b/implementations/plugin-swift/src/helpers/to_lower.rs new file mode 100644 index 00000000..81794c9e --- /dev/null +++ b/implementations/plugin-swift/src/helpers/to_lower.rs @@ -0,0 +1,25 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; +use crate::helpers::util::{insert_at, replace_at}; + +handlebars_helper!(to_lower: |val: Value| { + let str = val.as_str().unwrap(); + _to_lower(str) +}); + +pub fn _to_lower(s: &str) -> String { + let mut result = s.to_string(); + let mut i = 0; + while i < result.len() { + let char = result.chars().nth(i).unwrap(); + if char.is_uppercase() { + let lower = char.to_lowercase().collect::(); + result = replace_at(&result, i, &lower); + if i != 0 && result.chars().nth(i - 1).unwrap() != '_' { + result = insert_at(&result, i, "_"); + } + } + i += 1; + } + result +} diff --git a/implementations/plugin-swift/src/helpers/to_swift.rs b/implementations/plugin-swift/src/helpers/to_swift.rs new file mode 100644 index 00000000..132a26c6 --- /dev/null +++ b/implementations/plugin-swift/src/helpers/to_swift.rs @@ -0,0 +1,74 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; +use crate::helpers::detect_keyword::_detect_keyword; +use crate::helpers::to_upper::_to_upper; +use crate::helpers::util::{array_type, map_types}; + +handlebars_helper!(to_rust: |val: Value| { + let type_val = val.as_str().unwrap(); + to_swift(type_val) +}); + +pub fn to_swift(value: &str) -> String { + let mut res = value.to_string(); + let mut optional = false; + if res.ends_with("!") { + res.pop(); + } else { + optional = true; + } + + if res.starts_with("[") { + return to_swift_array(&res, optional).unwrap(); + } + + if res.starts_with("Map<") { + return to_swift_map(&res, optional).unwrap(); + } + + res = match res.as_str() { + "Int" | "Int32" => "Int32".to_string(), + "Int8" => "Int8".to_string(), + "Int16" => "Int16".to_string(), + "Int64" => "Int64".to_string(), + "UInt" | "UInt32" => "UInt32".to_string(), + "UInt8" => "UInt8".to_string(), + "UInt16" => "UInt16".to_string(), + "UInt64" => "UInt64".to_string(), + "Boolean" => "Bool".to_string(), + "Bytes" => "Data".to_string(), + "String" | "BigInt" | "BigNumber" | "JSON" => "String".to_string(), + _ => { + if res.starts_with("Enum_") { + res = res.replacen("Enum_", "", 1); + } + res = _to_upper(&res); + _detect_keyword(&res) + } + }; + + _apply_optional(&res, optional) +} + +pub fn _to_swift_array(value: &str, optional: bool) -> Result { + let inner_type = array_type(value)?; + let swift_type = to_swift(&inner_type); + let rs_array = format!("Array<{}>", swift_type); + Ok(_apply_optional(&rs_array, optional)) +} + +pub fn to_swift_map(value: &str, optional: bool) -> Result { + let (key_type, val_type) = map_types(value)?; + let swift_key_type = to_swift(&key_type); + let swift_val_type = to_swift(&val_type); + let swift_map = format!("[{}: {}]", &swift_key_type, &swift_val_type); + Ok(_apply_optional(&swift_map, optional)) +} + +pub fn _apply_optional(value: &str, optional: bool) -> String { + return if optional { + format!("Option<{}>", value) + } else { + value.to_string() + } +} \ No newline at end of file diff --git a/implementations/plugin-swift/src/helpers/to_upper.rs b/implementations/plugin-swift/src/helpers/to_upper.rs new file mode 100644 index 00000000..c1c6f20f --- /dev/null +++ b/implementations/plugin-swift/src/helpers/to_upper.rs @@ -0,0 +1,27 @@ +use handlebars::handlebars_helper; +use serde_json::{Value}; +use crate::helpers::util::{remove_at, replace_at}; + +handlebars_helper!(to_upper: |val: Value| { + let str = val.as_str().unwrap(); + _to_upper(str) +}); + +pub fn _to_upper(s: &str) -> String { + let mut result = s.to_string(); + let first_char = result.chars().nth(0).unwrap_or_else(|| panic!("Tried to call to_upper on an empty string")); + let first_upper = first_char.to_uppercase().collect::(); + result = replace_at(&result, 0, &first_upper); + let mut i = 0; + while i < result.len() { + if let Some('_') = result.chars().nth(i) { + if let Some(next_char) = result.chars().nth(i + 1) { + let next_char_upper = next_char.to_uppercase().collect::(); + result = replace_at(&result, i + 1, &next_char_upper); + result = remove_at(&result, i); + } + } + i += 1; + } + result +} diff --git a/implementations/plugin-swift/src/helpers/util.rs b/implementations/plugin-swift/src/helpers/util.rs new file mode 100644 index 00000000..9fc89e82 --- /dev/null +++ b/implementations/plugin-swift/src/helpers/util.rs @@ -0,0 +1,57 @@ +pub fn replace_at(s: &str, idx: usize, replacement: &str) -> String { + let start = s[..idx].to_string(); + let end = s[idx + replacement.len()..].to_string(); + format!("{}{}{}", start, replacement, end) +} + +pub fn insert_at(s: &str, idx: usize, insert: &str) -> String { + let start = s[..idx].to_string(); + let end = s[idx..].to_string(); + format!("{}{}{}", start, insert, end) +} + +pub fn remove_at(s: &str, idx: usize) -> String { + let start = s[..idx].to_string(); + let end = s[idx + 1..].to_string(); + format!("{}{}", start, end) +} + +pub fn array_type(value: &str) -> Result { + let mut iter = value.char_indices(); + + let first_bracket = match iter.find(|&(_, c)| c == '[').map(|(i, _)| i) { + Some(idx) => idx, + None => return Err(format!("Invalid Array: {}", value)), + }; + let last_bracket = match iter.rfind(|&(_, c)| c == ']').map(|(i, _)| i) { + Some(idx) => idx, + None => return Err(format!("Invalid Array: {}", value)), + }; + + let inner_type = &value[(first_bracket+1)..last_bracket]; + Ok(inner_type.to_string()) +} + +pub fn map_types(value: &str) -> Result<(String, String), String> { + let first_open_bracket_idx = match value.find('<') { + Some(idx) => idx, + None => return Err(format!("Invalid Map: {}", value)), + }; + let last_close_bracket_idx = match value.rfind('>') { + Some(idx) => idx, + None => return Err(format!("Invalid Map: {}", value)), + }; + + let key_val_types = &value[(first_open_bracket_idx + 1)..last_close_bracket_idx]; + + let first_comma_idx = match key_val_types.find(',') { + Some(idx) => idx, + None => return Err(format!("Invalid Map: {}", value)), + }; + + let key_type = key_val_types[..first_comma_idx].trim(); + let val_type = key_val_types[(first_comma_idx + 1)..].trim(); + + Ok((key_type.to_string(), val_type.to_string())) +} + diff --git a/implementations/plugin-swift/src/lib.rs b/implementations/plugin-swift/src/lib.rs new file mode 100644 index 00000000..244e1421 --- /dev/null +++ b/implementations/plugin-swift/src/lib.rs @@ -0,0 +1,46 @@ +#[macro_use] +extern crate lazy_static; + +pub mod wrap; +pub use wrap::*; +use polywrap_wasm_rs::JSON; + +pub mod templates; +pub mod helpers; +mod renderer; +use renderer::Renderer; + +impl ModuleTrait for Module { + fn generate_bindings(args: ArgsGenerateBindings) -> Result { + let version = &args.wrap_info.version; + + // First, ensure version is "0.1" + if version != "0.1" { + return Err( + format!("Unsupported ABI Version - {}; Supported - 0.1", version) + ); + } + + let wrap_info = args.wrap_info; + let renderer = Renderer::new(); + let mut output = Output::new(); + + output.files.push(File { + name: "Module.swift".to_string(), + data: renderer.render( + "Module.swift", + &wrap_info.abi + ) + }); + + // output.files.push(File { + // name: "module.rs".to_string(), + // data: renderer.render( + // "module.rs", + // &wrap_info.abi + // ) + // }); + + Ok(output) + } +} diff --git a/implementations/plugin-swift/src/renderer.rs b/implementations/plugin-swift/src/renderer.rs new file mode 100644 index 00000000..07b091a1 --- /dev/null +++ b/implementations/plugin-swift/src/renderer.rs @@ -0,0 +1,44 @@ +use handlebars::{ + Handlebars, + no_escape +}; +use serde::Serialize; + +use crate::templates; +use crate::helpers; + +pub struct Renderer<'reg> { + instance: Handlebars<'reg> +} + +impl<'reg> Renderer<'reg> { + pub fn new() -> Renderer<'reg> { + let mut handlebars: Handlebars = Handlebars::new(); + + // Remove the HTML escape function + handlebars.register_escape_fn(no_escape); + + // Register all templates + let templates = templates::load_templates(); + for template in templates.iter() { + handlebars.register_template_string( + &template.name, + &template.source + ).unwrap(); + } + + // Register all helpers + helpers::register(&mut handlebars); + + Renderer { + instance: handlebars + } + } + + pub fn render(self: &Renderer<'reg>, name: &str, data: &T) -> String + where + T: Serialize, + { + self.instance.render(name, data).unwrap() + } +} diff --git a/implementations/plugin-swift/src/templates/Module_swift.rs b/implementations/plugin-swift/src/templates/Module_swift.rs new file mode 100644 index 00000000..efa71fdb --- /dev/null +++ b/implementations/plugin-swift/src/templates/Module_swift.rs @@ -0,0 +1,45 @@ +lazy_static! { + static ref NAME: String = "Module.swift".to_string(); + static ref SOURCE: String = r#"import PolywrapClient + +{{#with moduleType}} +{{#each methods}} +pub struct Args{{to_upper name}} { + {{#each arguments}} + {{#with scalar}}{{serde_annotate_if_bytes type}}{{/with}}{{serde_rename_if_case_mismatch name}}var {{detect_keyword (to_lower name)}}: {{to_swift (to_graphql_type this)}}, + {{/each}} + + public init( + {{#each arguments}} + {{#with scalar}}{{serde_annotate_if_bytes type}}{{/with}}{{serde_rename_if_case_mismatch name}}{{detect_keyword (to_lower name)}}: {{to_swift (to_graphql_type this)}}, + {{/each}} + ) { + {{#each arguments}} + self.{{detect_keyword (to_lower name)}} = {{detect_keyword (to_lower name)}} + {{/each}} + } +} + + {{/each}} + +protocol Plugin: PluginModule { + {{#with moduleType}} + {{#each methods}} + func {{detect_keyword (to_lower name)}}(_ args: Args{{to_upper name}}, _ env: {{#if env}}{{else}}VoidCodable?{{/if}}, _ invoker: Invoker) throws -> {{#with return}}{{to_swift (to_graphql_type this)}}{{/with}} + {{#if (is_not_last @index ../methods)}} + + {{/if}} + {{/each}} + {{/with}} +} +"#.to_string(); +} + +use super::Template; + +pub fn load() -> Template { + Template { + name: &*NAME, + source: &*SOURCE, + } +} diff --git a/implementations/plugin-swift/src/templates/Types_swift.rs b/implementations/plugin-swift/src/templates/Types_swift.rs new file mode 100644 index 00000000..5a20b7bf --- /dev/null +++ b/implementations/plugin-swift/src/templates/Types_swift.rs @@ -0,0 +1,27 @@ +lazy_static! { + static ref NAME: String = "Types.swift".to_string(); + static ref SOURCE: String = r#"import PolywrapClient + // Env START // + + {{#with envType}} + #[derive(Clone, Debug, Deserialize, Serialize)] + public struct {{detect_keyword (to_upper type)}} { + {{#each properties}} + {{#with scalar}}{{serde_annotate_if_bytes type}}{{/with}}{{serde_rename_if_case_mismatch name}}pub {{detect_keyword (to_lower name)}}: {{to_rust (to_graphql_type this)}}, + {{/each}} + } + {{/with}} + // Env END // + + "#.to_string(); + } + + use super::Template; + + pub fn load() -> Template { + Template { + name: &*NAME, + source: &*SOURCE, + } + } + \ No newline at end of file From 97cbbf8ad66352bdd3e4772ad6d0515f499076a7 Mon Sep 17 00:00:00 2001 From: Cesar Date: Thu, 27 Jul 2023 16:23:53 +0200 Subject: [PATCH 2/5] chore(swift-plugin): fix optional --- implementations/plugin-swift/src/helpers/to_swift.rs | 2 +- .../plugin-swift/src/templates/Module_swift.rs | 10 ---------- 2 files changed, 1 insertion(+), 11 deletions(-) diff --git a/implementations/plugin-swift/src/helpers/to_swift.rs b/implementations/plugin-swift/src/helpers/to_swift.rs index 132a26c6..0379f23f 100644 --- a/implementations/plugin-swift/src/helpers/to_swift.rs +++ b/implementations/plugin-swift/src/helpers/to_swift.rs @@ -67,7 +67,7 @@ pub fn to_swift_map(value: &str, optional: bool) -> Result { pub fn _apply_optional(value: &str, optional: bool) -> String { return if optional { - format!("Option<{}>", value) + format!("{}?", value) } else { value.to_string() } diff --git a/implementations/plugin-swift/src/templates/Module_swift.rs b/implementations/plugin-swift/src/templates/Module_swift.rs index efa71fdb..2cd418a2 100644 --- a/implementations/plugin-swift/src/templates/Module_swift.rs +++ b/implementations/plugin-swift/src/templates/Module_swift.rs @@ -8,16 +8,6 @@ pub struct Args{{to_upper name}} { {{#each arguments}} {{#with scalar}}{{serde_annotate_if_bytes type}}{{/with}}{{serde_rename_if_case_mismatch name}}var {{detect_keyword (to_lower name)}}: {{to_swift (to_graphql_type this)}}, {{/each}} - - public init( - {{#each arguments}} - {{#with scalar}}{{serde_annotate_if_bytes type}}{{/with}}{{serde_rename_if_case_mismatch name}}{{detect_keyword (to_lower name)}}: {{to_swift (to_graphql_type this)}}, - {{/each}} - ) { - {{#each arguments}} - self.{{detect_keyword (to_lower name)}} = {{detect_keyword (to_lower name)}} - {{/each}} - } } {{/each}} From be8ad53f61d6c670af2bc8709dd06639a80f7015 Mon Sep 17 00:00:00 2001 From: Cesar Date: Thu, 27 Jul 2023 20:53:12 +0200 Subject: [PATCH 3/5] feat: module and types file builds as expected --- implementations/plugin-swift/.gitignore | 6 + implementations/plugin-swift/.nvmrc | 1 + implementations/plugin-swift/Cargo.lock | 371 + implementations/plugin-swift/build/wrap.info | Bin 0 -> 1997 bytes implementations/plugin-swift/build/wrap.wasm | Bin 0 -> 725521 bytes implementations/plugin-swift/jest.config.js | 15 + implementations/plugin-swift/package.json | 20 + .../__tests__/cases/000-sanity/polywrap.yaml | 7 + .../plugin-swift/src/helpers/mod.rs | 16 +- .../plugin-swift/src/helpers/to_swift.rs | 22 +- implementations/plugin-swift/src/lib.rs | 15 +- .../src/templates/Module_swift.rs | 17 +- .../plugin-swift/src/templates/Types_swift.rs | 159 +- .../plugin-swift/src/templates/mod.rs | 14 + implementations/plugin-swift/tsconfig.json | 28 + implementations/plugin-swift/yarn.lock | 5998 +++++++++++++++++ 16 files changed, 6638 insertions(+), 51 deletions(-) create mode 100644 implementations/plugin-swift/.gitignore create mode 100644 implementations/plugin-swift/.nvmrc create mode 100644 implementations/plugin-swift/Cargo.lock create mode 100644 implementations/plugin-swift/build/wrap.info create mode 100755 implementations/plugin-swift/build/wrap.wasm create mode 100644 implementations/plugin-swift/jest.config.js create mode 100644 implementations/plugin-swift/package.json create mode 100644 implementations/plugin-swift/src/__tests__/cases/000-sanity/polywrap.yaml create mode 100644 implementations/plugin-swift/src/templates/mod.rs create mode 100644 implementations/plugin-swift/tsconfig.json create mode 100644 implementations/plugin-swift/yarn.lock diff --git a/implementations/plugin-swift/.gitignore b/implementations/plugin-swift/.gitignore new file mode 100644 index 00000000..20591e12 --- /dev/null +++ b/implementations/plugin-swift/.gitignore @@ -0,0 +1,6 @@ +node_modules +.polywrap +target +workflows/output.json +wrap +debug \ No newline at end of file diff --git a/implementations/plugin-swift/.nvmrc b/implementations/plugin-swift/.nvmrc new file mode 100644 index 00000000..50157062 --- /dev/null +++ b/implementations/plugin-swift/.nvmrc @@ -0,0 +1 @@ +v17.9.1 \ No newline at end of file diff --git a/implementations/plugin-swift/Cargo.lock b/implementations/plugin-swift/Cargo.lock new file mode 100644 index 00000000..13e047e3 --- /dev/null +++ b/implementations/plugin-swift/Cargo.lock @@ -0,0 +1,371 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "autocfg" +version = "1.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" + +[[package]] +name = "bigdecimal" +version = "0.3.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +dependencies = [ + "num-bigint", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "block-buffer" +version = "0.10.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" +dependencies = [ + "generic-array", +] + +[[package]] +name = "byteorder" +version = "1.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "cpufeatures" +version = "0.2.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a17b76ff3a4162b0b27f354a0c87015ddad39d35f9c0c36607a3bdd175dde1f1" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "generic-array" +version = "0.14.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "handlebars" +version = "4.3.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "83c3372087601b532857d332f5957cbae686da52bb7810bf038c3e3c3cc2fa0d" +dependencies = [ + "log", + "pest", + "pest_derive", + "serde", + "serde_json", + "thiserror", +] + +[[package]] +name = "itoa" +version = "1.0.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af150ab688ff2122fcef229be89cb50dd66af9e01a4ff320cc137eecc9bacc38" + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.147" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b4668fb0ea861c1df094127ac5f1da3409a82116a4ba74fca2e58ef927159bb3" + +[[package]] +name = "log" +version = "0.4.19" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b06a4cde4c0f271a446782e3eff8de789548ce57dbc8eca9292c27f4a42004b4" + +[[package]] +name = "num-bigint" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f93ab6289c7b344a8a9f60f88d80aa20032336fe78da341afc91c8a2341fc75f" +dependencies = [ + "autocfg", + "num-integer", + "num-traits", + "serde", +] + +[[package]] +name = "num-integer" +version = "0.1.45" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9" +dependencies = [ + "autocfg", + "num-traits", +] + +[[package]] +name = "num-traits" +version = "0.2.16" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f30b0abd723be7e2ffca1272140fac1a2f084c77ec3e123c192b66af1ee9e6c2" +dependencies = [ + "autocfg", +] + +[[package]] +name = "once_cell" +version = "1.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "dd8b5dd2ae5ed71462c540258bedcb51965123ad7e7ccf4b9a8cafaa4a63576d" + +[[package]] +name = "pest" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d2d1d55045829d65aad9d389139882ad623b33b904e7c9f1b10c5b8927298e5" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5f94bca7e7a599d89dea5dfa309e217e7906c3c007fb9c3299c40b10d6a315d3" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "99d490fe7e8556575ff6911e45567ab95e71617f43781e5c05490dc8d75c965c" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2674c66ebb4b4d9036012091b537aae5878970d6999f81a265034d85b136b341" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "plugin-typescript-wrap-abi-bindgen" +version = "0.1.0" +dependencies = [ + "handlebars", + "lazy_static", + "polywrap-wasm-rs", + "polywrap_msgpack_serde", + "serde", + "serde_json", +] + +[[package]] +name = "polywrap-wasm-rs" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5cadd481ec2355b12d3dba7a80f40ec2271bf961e0024f1e27afdf1d47cb6b65" +dependencies = [ + "bigdecimal", + "byteorder", + "num-bigint", + "num-traits", + "serde_json", + "thiserror", +] + +[[package]] +name = "polywrap_msgpack_serde" +version = "0.0.2-beta.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "efb55e4b83dd7fb9d547792aa65d68698e3b16b3c0e26bb2846c576b4c994c9f" +dependencies = [ + "bigdecimal", + "byteorder", + "num-bigint", + "serde", + "serde_bytes", + "serde_json", + "thiserror", +] + +[[package]] +name = "proc-macro2" +version = "1.0.66" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "18fb31db3f9bddb2ea821cde30a9f70117e3f119938b5ee630b7403aa6e2ead9" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "50f3b39ccfb720540debaa0164757101c08ecb8d326b15358ce76a62c7e85965" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "ryu" +version = "1.0.15" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1ad4cc8da4ef723ed60bced201181d83791ad433213d8c24efffda1eec85d741" + +[[package]] +name = "serde" +version = "1.0.176" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "76dc28c9523c5d70816e393136b86d48909cfb27cecaa902d338c19ed47164dc" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_bytes" +version = "0.11.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab33ec92f677585af6d88c65593ae2375adde54efdbf16d597f2cbc7a6d368ff" +dependencies = [ + "serde", +] + +[[package]] +name = "serde_derive" +version = "1.0.176" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4e7b8c5dc823e3b90651ff1d3808419cd14e5ad76de04feaf37da114e7a306f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.104" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "076066c5f1078eac5b722a31827a8832fe108bed65dfa75e233c89f8206e976c" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "479fb9d862239e610720565ca91403019f2f00410f1864c5aa7479b950a76ed8" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "syn" +version = "2.0.27" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "b60f673f44a8255b9c8c657daf66a596d435f2da81a555b06dc644d080ba45e0" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "thiserror" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "611040a08a0439f8248d1990b111c95baa9c704c805fa1f62104b39655fd7f90" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.44" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "090198534930841fab3a5d1bb637cde49e339654e606195f8d9c76eeb081dc96" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "ucd-trie" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ed646292ffc8188ef8ea4d1e0e0150fb15a5c2e12ad9b8fc191ae7a8a7f3c4b9" + +[[package]] +name = "unicode-ident" +version = "1.0.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "301abaae475aa91687eb82514b328ab47a211a533026cb25fc3e519b86adfc3c" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" diff --git a/implementations/plugin-swift/build/wrap.info b/implementations/plugin-swift/build/wrap.info new file mode 100644 index 0000000000000000000000000000000000000000..ed5315bae33f43c6f11b79df5025dcf7a88512c0 GIT binary patch literal 1997 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 z zVRtdWQpy7aIN2q$CiHsLJkH9n z(IoMDLAH*Vc~r_{##n}h9Wa)WNAq+*TF3w))QKtxcnteq7cB|%lk&LBzh`y8`YNf{ zC`07M5v>*M&j~HtLcokkjHK_6#8^EIviUq{vyn)lYzw?pR2X4u}duPzP;> zQ!dJ`ps@&uO4^n<$H6HTQpp}BwM?=>Oe&%z6q$(7@qkk3At|O7ateka-iQjPB7D$8 zEh;H1el`|@PxM?LH62jeC^O5yYqV~UGQwnGK#Htjsve@)++?8)JSdoP)FqCEF-HL{ zQ4>ojK?W3$AS@|AgfwX)o=Fa&39qB7Xg{FjmL!PKXeUk4evl?jt_V}- zquNQbB`JuLepeQ6bjPe&ycyK$(oO)iW}iqhW2D8K!K6Xj2~g7X&gB+whLwiJ8(^iW zf^Ws*&B)ZWcmpz31UtQWGt@II-T?H>4C``>w~P7=i}%J3&-xQxyctiL7H`0lc0DTZ zEnfKm-u=Zp=}TqtYCn)Kb(~CF59>d}du*bx2F1zz)*dv|xoj1T9t&Ts@#hbB=Y4HXu zBW-(c=lvG%ywNk-8g`k*Deev%1-GIbgE_baXHfLC4SiAw&nBKYE;?1ze zuy_NkF;(!bSiBk6m=SE69&e;>mogL1esM4hMlp78m0H69aE@9xf1i=>~ zRG@Q$+rV)N1IHyGwF{R3xI(xDFgwB}kR(O81WxG^E@2=~)J_UCiJAhN!7d7-`}a_g zsBRy{#sk0;25Qr7@tcQE(tw5k@z0g-e`IDltJsT5&3SQrf{7s`X~V)N&{WPP?W7gk zQ+DwQ$}VQ0g_|Nw!SD(DJ@eQ>PdRoQ2O3bzq4A1}k8n~t#T{dO-+RhCb-3c5@}BWd z6(1X4rQ+T(dA9eI_l+AB_m8hp@$qr3;(_tCDn2pZrQ*TyZWX7;*QxmA_<9we8t+lD zT8#Iqe6$$fpz=&HzES04#rP(bXN&R8DjzS#-yv+pxnleQmFJ7`ZMy$dLGDM&r;G7E zmCqF8?^OAvV*FhypDo7Ut@6voc)!XE#rS(vK39z2uX>)>$(j89Hc%RK&J93mTmYp} zkz)-Ih0+gJmMeZ0eRdzWFv*ZdeJ%km20C{$fGtwa-b$*9pS`JS@aw87E=hq;TtHQm zb7aqf>JGoEr2vyrNXZIm>&oHjV2h&N8Q=*6kO-I!szW7d-FW9rX`b@|I%)=P3@{FS zwrmUE?GhI!EZ|Jp3_QU%e>_$~Qj}+vc%Sldj`3CmemGbCrY# z(mnOsa)g+bdvMrb6eWGvf5CKO&;)XjNTC;Khl<>|LJu;eq)#({yNZw!dJs>%*LlG* z;=lmzYG%ll#ldpA0oZCM=eH@@6V)^WI;!@tm`M7v((GxkKHBtA8#G^LwPJo(+@RC) zvT`u1kxVQ*aGa(-ZOTdCcv;f~?n3V3`SF_hFc zgMe$S>aBKlA>q&}xz??E%h*1bfimI1&gcKiP)C{uxJ;C#K&LUHT}aHJef~#>qn~6k z`KYpASO@&cl&`G)N5400_p~qZEVTwWN|~SaPEXHmq`dV@-ib3GX8ozk7N=%Cr#B0; z9$+o$*aRl}sjA^{3lSB6JX`r)w^=D`YN`n2D$K6Qn@G!tMM-Gm6MXvKxi*T;_+31?&7g+xen2(Y?>?tn+AUM3K( zJ>HtRo98H0*^&-)Mc}X}{{bg%&hjwr%~$QY(!#=a z`f(Cf`?&wT(vVqK2Ue;%aOHs|gsMD*(6cka_LT!xYn zB<~+9^-M`SQazerTiW7uUL6_o0La^jOGx0p|Jn3f#LxR%PO)MC)G?51cLr%Ja#(KQ zasj3h{Tt5Zl6QTQ%LONUG^hHr$*mrqeaeYEIM<`~hG%_PkZY{<*!*z?G`A?7G(&Co zAhBj|a1by@v6sz2Ilyj6KY$~vZ;@-jgrKty591seoIfknrRmy6iH)B0w);+uku=%T z$5${ENTM*L@fJu$JF7Rz1*R!q3MVumd5C7$--I&`Ah6?r1IR1p9d5!I91u3)fDTyf z$VwO6glEP#)(eQk^N7Oz@pp80Q^dP9n{J`x(Fo7VC5?=&)Y7{sZj^Fj8P$;DP1J&H zV1rp`3Y3k&bcGF%XTCR4uZu7+#+&d3Nl>yh`2&B|-pM!vFBkIkN z0<8%+djJ&ha6G6LyU1~tNJr$rK?fy3Fo}5ZF>wdlN_Vinat8`bcR=ZK$Igv(2?Wy+ zHynX%geMdxckouGmq1~12RS|75laCE{&K`ag+(AQ$_T;!C+mX?Oc^jB z8fJ};{WDA~Qp;S&m#=2PFq-tc?abMGFZ)052k$-a$CHESB~&dVQXvU(P)ogdoC}l{ z#46ocT+SPnSZ9*ul3PE>a!e#& znU0VK=cT2bNvCdSx4k5Bq_g0(Pnmw1sUD^m;~k7BfA*t1Hji}RgO{DijQME34Nl~4 zB?ugy+_*3UYI?fF#6$U1iB*U4$r7^;<@pku59JdjHXKSwXtzp8<~o(w1g>}CMFe47 zPygIeFVcsfFPd9!zv4{uf!p8eedhL0|LCJ<&Yr)pTKotm8(zJy+1T#mlruJLJ|gLV9b>-Jt%kj_Esb z>SVjmHGJYIjv{#K5sbtd{`t|1{Uu3AgglP8-6yBG&VE3%*U=B7`UY-cbeIp@#a{lb zrQmw@iEaFe&=b@3_EEBQ6a|4*I(33dkZ6#$IeJ3k?smULmi1k_n$cks5|5CQ&TybB zy8@e*M_<~sEq~`A+yievfz}d z*RoXiYmOVKXPGWd&eR(=DE2$U>%-XeMfsc-^vFlC^KZ1=sNJ{hF&?_P*TbMnigBh# zo%vYjlpdubj)o}?D)Ejb3`6-yU5_^-8x5hUCH}vG|1b0ZP5fU>rh9tWmTXwvq=mJ) zrr=c-vjlKaEE2gzF&b~WT;$f+6hPxA^L2*+<+)s5SEqbfa-*vNtjQykE?9-Fw z+n-TWkdIav1P(FVLa{@JbVgR|gK?@iF%yeE3)VS&PTF^1aQ} z%rJR^pQZX%dqUiT(dVbp|8AC89$aR;BvcIRamPBmndV%{xBqfm`2I^9l=0k-v*YoF zF;+GSV9TsTNPcKXd5&3RdSOTZ(CFVJQ*bnR_ZB$L?Q#djZPvaf;qEk?4e-4*hRs9QB$y4?4)3`SfOBZBB7RVPV8SAT%=PCbzcV_ z^-^AGwhnNMjkb{IQ=l0wX)lDoE+9CxU$!W&u`ZwWOW8oak>_E5=oB+GCBJ4Lz!KjIK?*iyO!Pg>v(eB0lmV+WZZihW0?c6u_Y1!G)B z#m&N{IO8*H?AqiN^3>hf`)OkrfheI+yFO`~_h#*_n>+h-d8l4O@EcO0 zw&c@f0N#9j%$b?+-W@xd&29fUn;nHV;mz&fwEe}#S07{d9dnduy=08i{KU&_TZ7ZS z7g8mf>PV^qf{I*2+9$QmF=nF|OKo>OW3m!X*q>_Sj_g*#mJ-t}POfGJzI+5<5J;Dv zrgBr<#XEP$z&Et1J1}yFhB>5iV=3(^Bw{WxVFuZyPgEvo1H+r z{;`ATpZfkdn^f9j++@p{jDlUSoMbHhcS*fF*(E=^3h1|HidhatKU<4cNeK=#=C&i!}e%;cgE%guSvk>@w<6VGV(5X zO#<%De)kQ|?D$0FUQF+fkqk`agx;Nib3yNZ*7fe32+*oeJZD1hj(!;y*&4q54iq>+G(8$%}EzM3-xp@wS+wc!-z3^sKUg#K=nQV1e zB9h6>i+%!>jEUJE zBoEsfXXNBF!wtsM@WUc_i4jyO>#d#*LfSfeb@a22CtF0ffepwIL^lKRgPrs?!;a zhDI+dQ2?Xy&P?c=nUzO+IOEPVLVVyBAM(z_GcqfWXq_3X%p|8AA2jIrQk7|I!QE~P za?jCr2;S6_Lw9g+Hc!pSGld&TPf;9Q8i)e1J4LGxk3kJ68M-?-Ikx6y@EHfsiUI@l zEcwTn{8=~1EJ`Y*I-VnjVY_I=n!KVV?>k6jUxN;~V2T90Dc+0(18gcCVt)w|L?$!) z&jbnP1aJtnBEgUV4v*?JVK%POHntuK8alwh1;}78AWBNKGH?NM=~{5XG)Wp3;cb8m z1`aN;y~f1Ab-@KP)?N*WX*)Qf5g4H>$M0{$VQp9~27~&lFV?ePyuJSHqvH>@CFVGI zbPHP>4}ypv9qG)njDaN zuf7(tVfK|>%jH-O`Fu>n#i5^PRB|@yqmsmtMOXFr2Nje;G?dN`t|Z+*K*5QiAEyA2 zalaP3nvfIUEyCTP`1TxthriQrL;AZ(S76R}XM~M38J_;Iuc?kRkh(j$?fmii`1pmM zKOapB5?QpvGcw|o+TlC-}C2D6Pod!UbLC?v`i3A zQ1$1?SeD*ozg;hbnG7K)4OmK=`OZ1QQ2stka)O~PkTnWX02WelC$rhq;KU4P9RZBz zJ2}Xvo{yQxvgXVIyO)&Eu*MjaW;m5d38bPDDM`$vVBXgzQbG-^`3?5Hi-J|Bd`c)b z%BRFy+(&^zq_j$CLI){Ofo`KfAv#2Xmh=${l+ZgUP&@CWfZXn(KqdVc1uE&i6pfDC z9g0xzr>I4WL!F`f00nv~1{~?B4^p6~o~FQv`bmmCI(2ub({my0p-#<((1-G6Lij_u zHdzQmc{IOHS?Ux4<3LoMIjgj6Z-PP@3!Ujj}+6m%_sj5xXn3jJ$4+dTqZ$~vyCX>Hpwfc z^iq~kYClQ_e;q_Krnt?MO&!A8$X_49oJnzqLp$$uXy-i+?fjUdIPXP&;gS0U^xRwC z@9@h99PjxF$9p~qd*hMQF6eyHfu5gogy(88X2&|Z`DR@lxluD;H46yTEgS9G#&-0xgy_kUe&nw(A9U(p4GG6wUHsJ9nJ5PNPjTrBh}{0)LJn7i2m-0Tc*R-55eImD+ZA2oHiat6@y6_dMhs*Z3l6fGjFgOm zy5m3ySyjI~tlW1)n<(|fRNL+Z&4mdPRERH#(=`I;h9AA2RwrMd}lObf&}v z6Q*p3?rX|4R2lWivEZ5__GvYBZc?|}s43bp<FUSxPO-cZ8> zCC&Np6jzSR(2b3Ok|3eG%s`V?o4F+Pmru5wGaCbyl}2T+T}2;Xb%gbgqR4@#vHm!cK0iy|ij{S7pi^w=QtYUMLktWl;1G9qJ@`eJ z9bqOl_JcjuXy1l0ArRqfTSVgld$=kkdkpXW7t@#?oaqkQM`++XCa~F3N@yqA)C+ zSAAkO`owI{6Jr|ya2-(r8$buu$B5(E`rZiXOQ4Cxdg=JmR^%GPV`6EL3!g#?-*(D+ zIVybHr10VU!f0GC`BO_rm$pmc!Nu1$y{eLK3ES3+>5EkArZ+dWO0Hd_yfU=R> zG3sb^57-}!0gjg*i%nXd&TP;VBx0~rN$n3J&KA}iy;(OU#dAwp=iN9DbXMd#jRcB{t{6_#5?w(nMyk#jlvN=a0%?9}ECb56z>X|G zS)((4v!v1RtAO7GDipW32t`Mdx{D0}KiInb%H%llt0nCY^v$;paSQ%lUWZ?B+sHO^ z4DR5_U&}MNZytaS*RV&KQOF66rZVObw0+g*3cqm(S$4!RtiKsv3a1$TQW29+ZL)O= zD%x9pG5PtDn^neshRx~M9MW{N6ZG=p+#-DG_jB|%Y!B|>Dg#%5q>S#Q_26@Z~D zS&G%DZ`Za}PiuOZ<`~`&Fh~2{N0*^LW;>rDRpeM5IQ)zYho6BJ^GB!T!322>+u9j7gD2pl zzm=#TV{+Jw_}qM`6Z*nWILodC$;%8$p)J-R@@06#V+0H&4~5-dR~EWPPMUk!VCGJY z$GnAc662H6mi~B~G zyHBDG#*N4}yO0SM@LBt1d&XTi(9Q)y+MKaL)MU25sE)^#*O+6k65AA_<1^rx0k`>_IM zqu-kTO`w=cp_mw3FfXUH;rDOu743&l;r=Y!YfjMSJAIWBPs6ZaNKW=k?wxJzDXoKlsoBV#}Pq0&h~~tE5 z{aEA=0!3Z!z*I4y3XBYmz0Qo$!g_Qx2*5!8VBz% zA|Svusg*2Im~s@)u@(L6{pFKIea&IS_-%5I^3BjQ$-na=YUWS+Fhf~y67Ar9?9(K! zj)3l{ucNJldN)1#BU+#N~*U)KNR2uC470|AWPo)y@>J?uei> z?F8brec7KJ`;%AYC%yaL%)10}r{XJQhg4hD6}Y^bJSQ6I3E+o4!CxBG?3W<@X!KHF zt3hC#Sl^&-I3D2mSoB`iJ#4FLev_Kd{r1b=sKy(0(R+(vs;;AyFmC%@6bB&xq!z|Bi5u+p5z~luchyA(pQg@^=aPHQCPYhs3*GfqAu?_oxV?UWKWGhz1t8Lv+5^B!@p#?m z^ZJ2NU$gR{HP(o|GB`Y?xMO&*2^AlGqG08OHKYhv^^4F6Bi7ML@89m!zkYoMyDjsw z+v$tm@v^-UHM8r|!)5#5zNW2($FEC|2QnXzgan8*zv+YxIy)6xD`0CFwxrHAb!X@+ z3##6%ngjeb5(sTU#Fytp+ZUROgi~E2d47cA++P8XCNdBWnX|pjZf#Y!tiMs$4u@7~Lwo5J-zI>t}?od6Ef+f0wh!M1j2vl?Wd zmJ%Rg5YOaHn;}KuX(bE>Oi}uFAMc^KXsNGdG0UVAoLwcGg)p0wD|ADHHEUe@6j&$> zZM3Dy-lnB#-|oVVxUUhv!F!G<%5(Ojre5Brgg9c)`*+_QwuK(QF+I+w40t!wCKyn( z$9P9uxG^E1IwAtgpG{DW$rc2_Mi)pm z(`LMdctL1E!dy5Jd#wq1F($poqZrGyXzlYbK?k6SOm zDxyu*pUx-<7z8s^w$Hi~a0(5<(_!v!?mf^Bk3#2N?q&*6VIK2o14>i4&%C1$749{k zHlpyP`OUiuksfs$3F6jF2SkAeAeVUnQFK8Y+O$|b;2TkycnZjdwC#gJsoC=Gwflp< zXQE-mzIr9FfG# zLBW23F6E{gnQ`K2m2gk9hHS~^$rcVjCQw$a$#N;+3d1k}t6+CLG2SH61`5akkmXu- zxuxh>p2|w(9Q%?sZ2u@@BB2PzoS6cGnE_tg#^NfP;!y0khc8&GMZ7f4Mf|eYh z99_D^fnmC~@y`)ga<;HV}lJK(e0UWdW&Y8ELzZAFv#+ zBOU@tQ*OSmCif;0e@HPbi1 z3=Dx?N#72@kYTpK1jCKJYMW+;MCcuK@DKW4u;v|+K?W}%>F5Iiw9t9D#60VwffE&R z8NxmH;z9;Z0}+y^N9)^&)~w&Y-m&CWSQC;B4r89|nf`Z{vZqZde5viB@<21|6H10r z1VRb$iO7{j3q~lcR4y+^CLNqbppy$dAGNNhOBB2wq2QyGqaFXB-0qdYo)1z02>8Sl z(M*vHqC4LE?lah9*=dabxCABBw?LmwKiX#jW6QMrK;$gO0F4?^rQ^-ykz=@DFFbV< z)7^oDOfBRH4tbXl6ZErl^c2cK4Ip3=F##r5hzSNyhzTSoAtqQoLQDXo5Ml!5;SdG% zC&UEnOo$0U6+%p)$_g<7enN-|qGW`aU_}ZsfuZ<*3Ra|`5+E%El>lNPs00uTK_!4# z2r2=#LQsi1KqbZjD$$sfXkZKEIYV0@&Klgppc3FM5MT{(@q|hc7v~ey0b@RMx$yk0 zWwZ7Kt=o`&FPotX-rYGtYes)1q=TUub_u_r6SQ{gw|$O7*zd@LgX6Jo_Ad_=2nJ4| z0_Ou%pt79w;3sD|D<@kjpX0MHaGmkP$);Ey4(A6bf9!{riRYky{5C#^GaV&*c*4F^(Gg=v zq3XJnud}FUv1yez$)e!qEYrE!hUlMy!{nfoRSSkrw6VhR=Gq^Sy-YT&y8nwH(2hHjasdYyT-`x@GhhsD_LMSW_hz z&YCK2<~iL*ui?j`TWN{dWKKjuI4YxEmpjO9LU|(Q`jZqG0C`e^UU>2!Jn~UJ0v!NZ zON#Ui>sVsm%fD=5f8q3gMV54&94ZnKBz;#}a8P~U{ACE)R7)h?RmrLRa3>@dR9~}- zD1(ByScMG|VxxrL%fK|>mZ>26%^k88*SUXq@j*pg%S89kxjp)Gn4p4<&XtV-Q zC4X7j^-%ED6}>5Ii@ljpB=jClzrJepH>;QdtNXSL3xi--c#vyqI;}rTt|iRZ%mks^ zE(Q^#VVN%&CD{Ao);JLxX~KY^^tCEN?E3lM9YV^`mq17X_L2-4HlLRwq}Y1v5*-uW zv7=zeHyMR~6I8d`675McmNdj*)Z8(;*CZK9=fq%-er?#^h`9I+Vk0ts54!cY|K2|z zzQ3nt(YpKS1hU$_UfeH>v@evI_9v)o7(WD;nQ4DI++m()+MkO*!~bX6{{u@~d>F27 zjrs566MT8V0cSkWX$O_D7pWm7VWUmae(t&9`+B_(bX&$!P|GOPviv@@rteR_|M^S5 zznFTaE%4V~{>`u17RY|5zyG(t@ynl|(Uu5vR^xT=*MI)+{p-H&b%r^00XMHkXtD`^ zF z-i(5in{j4LnDh8*gs49M7a*=1Uifk^%exEOLpIeEiq4=|MD(E;5jaAz1$!;U3O)^r zohaiJ%1}VD3zeK=571nSn*iKW?89|Uu^&t>#X*p^6t@9rq&Nf^m*OMiTE!jXM#Y`u zYZXg(&-gn1b?euyqD_Zb`@s9*wAj1 zNX_Xs+*xD@H{9IYGTu@hDgzjcRDhB`DFnvCEw@;2kG@(mSojZp1U}twHcPPWyI|Xo ze%j5!Pm4!Ze%fm!!g2WncgYFMk0!)ksk_aU^)=?A?YHity(USndeG!ndk`0GACMa^ zTD*#V7h#uX+G4!LoU`01_x{WP_N!TQBR)=bmHr7{~8)+14 zA&RP1hJ&4Q_}2EIRd3Jt>yajL5q~Xqv<-6766JYPZrK&SF5~kelc&Eb4AMgoD!fi%s5qBp9($FyCzDG+lI){^};w<|rm1uCu2D!Iu^xxJIPB)_n1ea{-J9x+B z@5ADax{D7niS;$ujA;$gxC&1l%NI)nm#lSkJ?>YF^|d^xX6`hXtipA}CJhDG#7g&% z!#q^?rX8dhq4`;o<$iR@R^F(N7r+~3Be=-AWDF#PG2jTRJH|UY9|^=`fo4ONQa{kLBMN;Sg$T7L{RuMBV@25Vf}yk1f9sk|@2&{3<;? z5oB6DF{PQU;L zcSn#Gqn_`<&PyKbjLBxb+~1^s5o=qLfu~P_ZDp1MwuhZr0Wu>BEJ9l-u=A`?VCUIM zfn}$rz_PQ80?W=G3QNzhB+CxjRAkcGPl2K4AO&`w+bFQ*01T7a<|7o1l!PTk#@tD9 z-2n_kOA3&=HwK@OHkt-5M7Va>Xt+nxfQk7a3C$N_wq9`t1Tt;XNcl?1vL{$PvPacS z7gAaX#FI)_%Y4B8m~q<3jMyG-8$DJ=tajJ1UCY{FsBotm#4>7GUnzL*SEdyvG%490 zD=BFK_7*fvY>`R5l;Q*jnD2nYgH`|~2^{VVrRy!(H6ByJhulRg>x?{_+RDyQ>hDJ> zZt!@Fb=Im89;G zc8ab#I36(b{+w-eSMUfA0SenO-pI7e4#2L3D^&gwz5;6?AqXEw+zD0jpJd$iFwZfdv)EwtI0ma9Vui2wxPjj+{2C(35ds*B z+Q%R3kN!URPA8OzSW8S$vt_0{+G%>1kT-Y^Z4yv=;qXiYPb`V&@ERXTAp)A~_DMc) zq2Go8fsRAkW}m4Zus2IhXX7~b5Y`_CKUOFMu z8&^m1$SB*i86aB$5(VC1U6QnzZc`I04=apeN#@%eSvtiH`9}=3h)0z|-<&2{)@R7nEWci~oljkDgz!(mrK#OICVSukl zycA|g*|u=r{6!3UT2AWhqT7Qwh*1Ms;dRm2jQ%2fJRD65h}nxqSWuy1oUVr(H%Su| zX0uQ>#Sz_toEhuey`}X?G7Z?w>pIPH`#$@7`>SbOE(GBUPfdc~E;ODj>nUG}QU zgnW|46E;gtOh)bVCXB~yg8{jp-`>j(hzdb1jHivZ?1Rx(IE7C-$WJ_Zn?#J=U*M08 zx|-#}a6~5wZqE_Z)A z!_sB$rkCxb{&aw+cQ7&6+Ny&ZvGzG}-3!tH^*}61);<#i)bLdX!HC=>jRaJ0yH>x~ z-0BxV>ro6!n+bXMj*2-WJ-mtOrV6H;qOHso>Gbyj;f%#Lo9! z;75dCPvD1OwU*gmCGfNFdtx+;od?b!fxjDaJ_pQE%w6Js34+O9M z#r&x?)+YW6Id}Jrp$!?9mQ?IRsiW8r)1pf_X3lbuB*V1=A~KL1v2kh+{m{8EAY?^JJ}L>&lmuXGe1bn`P&sdxRUSyIMTRu!ifnpC5s1 zA)undB*Bpmjvi=>sf`}&&mQ_tag!)6v;c{O9tXOyk-4{-VV=}Q{tRRmdOD*%p_B@v zU=2fSWdKl-(znGZ9*FM8Xx-6Acfm9%YRRI~P9(#xgkaIxjyc9F2$q;=NYb0gb}CjB zhvt@_B>C~f-s*nsg(6%#>e<8v{&eeId0e6wZ8u_om42epvqnCW_7Jr2H;;ZRnT=w{ zofq5-h)iS?$4TqUCJ;4aco;(A{kwOdPR!W=<#k0L;po^H?dpu?WO5j`Ob)|l z{n>BIBTE$nz{yqW{+zmBsrw-LLidTZQun1vSm)I^b>7$|4_W6o*eyM3o!2w!ygjp! zJI~|Rd3*dJzGQ(*ko&yFrZ`csIz%z-t1C9y4RJi;D}g#9D;T~4&S#-sY?I$(HTN?d`#Gmt8(}upSEGND z%=Ah9V^S6y0veBu&2Jd?;00|>uvnWSl85UL{Nzjz)0M#6Y+%(pRhaz(R$=f7u&GD+OZ$T{irMju_`e#i z{{8TAs9O%`l3{}}FvishkPGe0zY${Tw2Z|~HTX_17Goz3(x3B40-yB z{hoQMEu_d*Wxau`YRd|I6{R8YRfs9_)rg!6d{xglU*(zQwR|-|=ETg{RQMp)BmRH| zu!!M#EHGmM`b#W84~hlw7){6ZCNgH$kOCYVMS+l|Madei%e$87H8Phi6esu~Ug4)P z@hYQoBpv-{@g%)OR)|F-D1~ARq8*Zn$U3EE8bG#ET1%!hp=xNFY6?J_L?l$P=yKL< zkh9`k2VTLNUM&=f3=N79vZ%GWNx^!7}5_ zWwIdUboYN*^bQ}M~%q2ee`dcIVsrPCrmzK^u|+60u|qK)*jd{I|R*c z%Hta7i|=L=a=2A@NU}?)j&0O3Jvq>LwVwa4AX+If^>^-AcM#%JKYUom|w+>oR-XK?gjZ~SLrAY+_DiOV+!`dz> z1Lv;Z2AltE-^a+!oBcSa!Nwm=KTa*#_^zjsZsXIz2p?U<{&coZPdy#-1!d1LcA{Cg z6Jgz1&rU?th?-7L6?KHoQQAEgXfaYE$+aGE=EzPo>%;^OTXrIjL6n_{6J%s3;v7Xe zhH)t?Vt~^xWiH}W2APXyJz{`^SmYQ6Y$M0;tVawGs*htfnvz~{AMhVsRnC%tP(0)9 z{a5$ee_LpS15y6ge|`57$?V$&aJcO!L3+23KA|jTsN3vqC>F$X0%PH#U4^HDUAczK zx88b-thl%%*@bv{_Tj(O^iFc3$SM9PPM>T)1auqy`*i#2InxxegMtVd_h7uCiRL73 zSHrhj66wJ1n^h2Twt}Mc^E$mO~Blr-i34Nd``0+H_?HfN0bZXe1wZ4tn z#kgHPd|KL)k4*2Btemj?Sv)k*0dl$y1u0JP0W!-oXRANsBWxZbdJ2e|N>p*v<0ut+ z1HmrxA}yFjcva0X%pa)-|HUcV#Bjn6ttM|gUodDa(3XeByrtLa(gw!4Wh?}mDo;0f z<$44DPd z8ey*;TmxhI@D_P^dDuob42(LY^*vmm?+6fD-3W~uK`dZiFd#q@nKLbZn^aFvR53;x zTt@I6)B&&XIz%B-E)ao4KeW`S2Qpkc9}A0HWF6J2?6p_G%!`LlGBaFUb7aTq@vu6? zRIsmU4M5oFM>I;K#$?~kbpcsdI2f5jNWNfUN>_8*<{3RaY_EE_?GyBH!ehCb;^+?j zpv1h`+W1Ia*czaLvhq+_y=x4~*&xIQ zAA`8G4rzOB9zV5V=yQqTfCiR_QVDej3Ss`-`j0UD=KvJ_NBV1xk-&=-?0>!E|_O zxjpy9EKMqr#XkkB+W{4GhlRmAqJt;AK3LZAvHb-tu;_pY_1ee%w@SnL>QB#(dyE?+ zf!oFguK~3_Bm<}Zm^JnU$cs+Jg+Th6NcBixT1fDj-YMvxg_#(Gri_o(mFVA4Fdh20 zO^#_5BUu)q;uyIMp$h#SxLZ{o(knzQwaU4p+k)WOblC;pD-#D@hY5*!u?sjW)$)Tt z_`I4+v%~C3PqQcVtJfyIX!Zn)^T{wtVQg| znr-o$o=A+z+H=x7s@*p8y_O)oetVvQ1iB>t!2s4LHRYTqB*)Uj%y)Pn8F z`qD!xkYZUK;Y{zsSAjD(gLN@?B~%ZqYswz)MFTZ&?t zN9Wi^s?d`-Hg$_)IqHFFw~vY^F!1zAQm1?Sg>-&O%rZgG3`@(7%H{Lcbu>$wI8!0)0T_@o<_v280^%* zNkU_7BoTQ}SOBa_A6PAVRs#!Db4@1_-)K2$jJB50MyzBI7?`016=|n^+UAAOj+3EE z)mEKYLuwdBtRZ5q7Pn<2Yo9cxw9d**442Q)B`VM=wk~O1N9H=+CHezLRatly=G4?M}`IloI0 zA9$L}^M02iKJX?XZ>f2_~eCr_XRHbQ+;?oUw)lS z{?y$U^X1E2@~7^;lrO)*C4cJfEBW#@F8Nb;U(J`_vt*Q121rS!S7PU2fohb^M02iKJYS^FZx}I_`o-~e97-p#0OsE z@)f^J5g+&_m#_L=iuk~rT)ysiDdGcZKYAno{EoIJ$*U5OqR508`iJBnTFC=EWN@+* z3txL*xx6;}{{9@I1IO;MGf+$;DUc>*nuO0{0CG3{PKQv`o#gupNjIl_$hzOZJTPMD zMi+n)&k%Q9dA|Cde_>YEId)3%$idwf8sS2O{&kZdqh!`YHdk3{Z|=#ZG)I6$yZtz> zno9iYbo-N-b59Anpp6w1rAd&eB=rC#LgrAe6`D*Oxaj$KEle74fL_IG+8 zm4&xY*HWhN&J`V={?7+MaE!UOG4nbXH|s)f9~{hFNk7621&RWQv{@tRDZPX9k|eQ@ zYAs!yaloDBy#`RKPIs^foo+J_GDhwQLDA~(PVY8I(%9{7bQ{$ErMs=uG1cvVle*pQ z&i~~`dVc>`sT*n9)VeaE6^ix?zX#-e^ixBh>MJk*to6+snpT%sc zjssQW-}BuADgBX7q^{tm_{O{=+5ZGdjQ%a;+x^7SmN2ZBpeZdf4%Ki|AFJ=y-jhf~ zqW|-hEdVnZ8%J7-3N>`uL8UMLg&4Jxqux1X8wETX=Mf@HTW{?%0fqz* ztK}l%a7`s_BQ!Zp1`6=#%_6#U@>Ja1JEwg5A^5>5X`r?$wKo59rl*qPR6VXa8-;(@ zou=pY2B)E^nM$&4&3HBpB8gsn5W6lR7$QyD5#2(0sovasy-f z(rGD_leJEE{V?l!_S7Joz3d$E*$cjr{813eCB&$7l6(iL(>N>RXeOy~KRcIf#-5m% zuUaYhmOx{JTimEjQ*lW$w`WV?vuD%;vOtwANS~g0N==vHogdTL?Mzp8tbpdwbkU

m3l|Mmb<_-k>9I{cjWjY~}EXW`TRnNOvvQ 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%0D! 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 literal 0 HcmV?d00001 diff --git a/implementations/plugin-swift/jest.config.js b/implementations/plugin-swift/jest.config.js new file mode 100644 index 00000000..4a4c022f --- /dev/null +++ b/implementations/plugin-swift/jest.config.js @@ -0,0 +1,15 @@ +module.exports = { + collectCoverage: false, + preset: "ts-jest", + testEnvironment: "node", + testMatch: ["**/__tests__/**/?(*.)+(spec|test).[jt]s?(x)"], + globals: { + "ts-jest": { + tsconfig: "tsconfig.json", + diagnostics: false, + }, + }, + testPathIgnorePatterns: [ + "/.polywrap/" + ], +}; diff --git a/implementations/plugin-swift/package.json b/implementations/plugin-swift/package.json new file mode 100644 index 00000000..04fb0137 --- /dev/null +++ b/implementations/plugin-swift/package.json @@ -0,0 +1,20 @@ +{ + "name": "plugin-rust-wrap-abi-bindgen", + "private": true, + "scripts": { + "codegen": "npx polywrap codegen", + "build": "npx polywrap build", + "deploy": "npx polywrap deploy", + "test": "yarn test:codegen && jest --passWithNoTests --runInBand --verbose", + "test:codegen": "npx polywrap codegen -m ./src/__tests__/polywrap.yaml -g ./src/__tests__/wrap" + }, + "devDependencies": { + "@types/jest": "26.0.8", + "@polywrap/schema-parse": "~0.10.5", + "jest": "26.6.3", + "jest-diff": "26.6.2", + "polywrap": "~0.10.5", + "ts-jest": "26.5.4", + "typescript": "4.9.5" + } +} diff --git a/implementations/plugin-swift/src/__tests__/cases/000-sanity/polywrap.yaml b/implementations/plugin-swift/src/__tests__/cases/000-sanity/polywrap.yaml new file mode 100644 index 00000000..a4548d98 --- /dev/null +++ b/implementations/plugin-swift/src/__tests__/cases/000-sanity/polywrap.yaml @@ -0,0 +1,7 @@ +format: 0.3.0 +project: + type: plugin/swift + name: Test +source: + module: ./Cargo.toml + schema: ./input.graphql \ No newline at end of file diff --git a/implementations/plugin-swift/src/helpers/mod.rs b/implementations/plugin-swift/src/helpers/mod.rs index 8adacf0e..424e17f0 100644 --- a/implementations/plugin-swift/src/helpers/mod.rs +++ b/implementations/plugin-swift/src/helpers/mod.rs @@ -7,12 +7,10 @@ mod is_keyword; mod is_not_first; mod is_not_last; mod pretty; -mod serde_annotate_if_bytes; -mod serde_rename_if_case_mismatch; mod to_graphql_type; mod to_lower; mod to_upper; -mod to_rust; +mod to_swift; // helpers for helpers mod util; @@ -46,14 +44,6 @@ pub fn register(handlebars: &mut Handlebars) -> () { "pretty", Box::new(pretty::pretty) ); - handlebars.register_helper( - "serde_annotate_if_bytes", - Box::new(serde_annotate_if_bytes::serde_annotate_if_bytes) - ); - handlebars.register_helper( - "serde_rename_if_case_mismatch", - Box::new(serde_rename_if_case_mismatch::serde_rename_if_case_mismatch) - ); handlebars.register_helper( "to_graphql_type", Box::new(to_graphql_type::to_graphql_type) @@ -67,7 +57,7 @@ pub fn register(handlebars: &mut Handlebars) -> () { Box::new(to_upper::to_upper) ); handlebars.register_helper( - "to_rust", - Box::new(to_rust::to_rust) + "to_swift", + Box::new(to_swift::to_swift) ); } diff --git a/implementations/plugin-swift/src/helpers/to_swift.rs b/implementations/plugin-swift/src/helpers/to_swift.rs index 0379f23f..58aa79d7 100644 --- a/implementations/plugin-swift/src/helpers/to_swift.rs +++ b/implementations/plugin-swift/src/helpers/to_swift.rs @@ -1,15 +1,15 @@ -use handlebars::handlebars_helper; -use serde_json::{Value}; use crate::helpers::detect_keyword::_detect_keyword; use crate::helpers::to_upper::_to_upper; use crate::helpers::util::{array_type, map_types}; +use handlebars::handlebars_helper; +use serde_json::Value; -handlebars_helper!(to_rust: |val: Value| { +handlebars_helper!(to_swift: |val: Value| { let type_val = val.as_str().unwrap(); - to_swift(type_val) + _to_swift(type_val) }); -pub fn to_swift(value: &str) -> String { +pub fn _to_swift(value: &str) -> String { let mut res = value.to_string(); let mut optional = false; if res.ends_with("!") { @@ -19,7 +19,7 @@ pub fn to_swift(value: &str) -> String { } if res.starts_with("[") { - return to_swift_array(&res, optional).unwrap(); + return _to_swift_array(&res, optional).unwrap(); } if res.starts_with("Map<") { @@ -52,15 +52,15 @@ pub fn to_swift(value: &str) -> String { pub fn _to_swift_array(value: &str, optional: bool) -> Result { let inner_type = array_type(value)?; - let swift_type = to_swift(&inner_type); + let swift_type = _to_swift(&inner_type); let rs_array = format!("Array<{}>", swift_type); Ok(_apply_optional(&rs_array, optional)) } pub fn to_swift_map(value: &str, optional: bool) -> Result { let (key_type, val_type) = map_types(value)?; - let swift_key_type = to_swift(&key_type); - let swift_val_type = to_swift(&val_type); + let swift_key_type = _to_swift(&key_type); + let swift_val_type = _to_swift(&val_type); let swift_map = format!("[{}: {}]", &swift_key_type, &swift_val_type); Ok(_apply_optional(&swift_map, optional)) } @@ -70,5 +70,5 @@ pub fn _apply_optional(value: &str, optional: bool) -> String { format!("{}?", value) } else { value.to_string() - } -} \ No newline at end of file + }; +} diff --git a/implementations/plugin-swift/src/lib.rs b/implementations/plugin-swift/src/lib.rs index 244e1421..6d5d22d0 100644 --- a/implementations/plugin-swift/src/lib.rs +++ b/implementations/plugin-swift/src/lib.rs @@ -3,7 +3,6 @@ extern crate lazy_static; pub mod wrap; pub use wrap::*; -use polywrap_wasm_rs::JSON; pub mod templates; pub mod helpers; @@ -33,13 +32,13 @@ impl ModuleTrait for Module { ) }); - // output.files.push(File { - // name: "module.rs".to_string(), - // data: renderer.render( - // "module.rs", - // &wrap_info.abi - // ) - // }); + output.files.push(File { + name: "Types.swift".to_string(), + data: renderer.render( + "Types.swift", + &wrap_info.abi + ) + }); Ok(output) } diff --git a/implementations/plugin-swift/src/templates/Module_swift.rs b/implementations/plugin-swift/src/templates/Module_swift.rs index 2cd418a2..5b2ac80e 100644 --- a/implementations/plugin-swift/src/templates/Module_swift.rs +++ b/implementations/plugin-swift/src/templates/Module_swift.rs @@ -1,21 +1,26 @@ lazy_static! { static ref NAME: String = "Module.swift".to_string(); - static ref SOURCE: String = r#"import PolywrapClient - + static ref SOURCE: String = r#"// NOTE: This is an auto-generated file. +// All modifications will be overwritten. + +import PolywrapClient +import Foundation + {{#with moduleType}} {{#each methods}} -pub struct Args{{to_upper name}} { +public struct Args{{to_upper name}}: Codable { {{#each arguments}} - {{#with scalar}}{{serde_annotate_if_bytes type}}{{/with}}{{serde_rename_if_case_mismatch name}}var {{detect_keyword (to_lower name)}}: {{to_swift (to_graphql_type this)}}, + var {{ name }}: {{to_swift (to_graphql_type this)}}, {{/each}} } - {{/each}} +{{/each}} +{{/with}} protocol Plugin: PluginModule { {{#with moduleType}} {{#each methods}} - func {{detect_keyword (to_lower name)}}(_ args: Args{{to_upper name}}, _ env: {{#if env}}{{else}}VoidCodable?{{/if}}, _ invoker: Invoker) throws -> {{#with return}}{{to_swift (to_graphql_type this)}}{{/with}} + func {{ name }}(_ args: Args{{to_upper name}}, _ env: {{#if env}}{{#with env}}Env{{#if required}}{{else}}?{{/if}}{{/with}}{{else}}VoidCodable?{{/if}}, _ invoker: Invoker) throws -> {{#with return}}{{to_swift (to_graphql_type this)}}{{/with}} {{#if (is_not_last @index ../methods)}} {{/if}} diff --git a/implementations/plugin-swift/src/templates/Types_swift.rs b/implementations/plugin-swift/src/templates/Types_swift.rs index 5a20b7bf..3c9dca1b 100644 --- a/implementations/plugin-swift/src/templates/Types_swift.rs +++ b/implementations/plugin-swift/src/templates/Types_swift.rs @@ -1,20 +1,153 @@ lazy_static! { static ref NAME: String = "Types.swift".to_string(); - static ref SOURCE: String = r#"import PolywrapClient - // Env START // - - {{#with envType}} - #[derive(Clone, Debug, Deserialize, Serialize)] - public struct {{detect_keyword (to_upper type)}} { - {{#each properties}} - {{#with scalar}}{{serde_annotate_if_bytes type}}{{/with}}{{serde_rename_if_case_mismatch name}}pub {{detect_keyword (to_lower name)}}: {{to_rust (to_graphql_type this)}}, - {{/each}} + static ref SOURCE: String = r#"// NOTE: This is an auto-generated file. +// All modifications will be overwritten. + +import PolywrapClient +import Foundation + +// Env START // + +{{#with envType}} +public struct {{detect_keyword (to_upper type)}}: Codable { + {{#each properties}} + var {{ name }}: {{to_swift (to_graphql_type this)}}, + {{/each}} +} +{{/with}} + +// Env END // + +// Objects START // + +{{#each objectTypes}} +public struct {{detect_keyword (to_upper type)}}: Codable { + {{#each properties}} + var {{ name }}: {{to_swift (to_graphql_type this)}}, + {{/each}} +} + +{{/each}} + +// Objects END // + +// Enums START // + +{{#each enumTypes}} +public enum {{detect_keyword (to_upper type)}}: String, Codable { + {{#each constants}} + case {{detect_keyword this}} + {{/each}} +} + +{{/each}} + +// Enums END // + +// Imported objects START // + +{{#each importedObjectTypes}} +public struct {{detect_keyword (to_upper type)}}: Codable { + {{#each properties}} + var {{ name }}: {{to_swift (to_graphql_type this)}}, + {{/each}} +} + +{{/each}} + +// Imported objects END // + +// Imported envs START // + +{{#each importedEnvTypes}} +public struct {{detect_keyword (to_upper type)}}: Codable { + {{#each properties}} + var {{ name }}: {{to_swift (to_graphql_type this)}}, + {{/each}} +} +{{/each}} + +// Imported envs END // + +// Imported enums START // + +{{#each importedEnumTypes}} +public enum {{detect_keyword (to_upper type)}}: String, Codable { + {{#each constants}} + case {{detect_keyword this}} + {{/each}} +} + +{{/each}} + +// Imported enums END // + +// Imported modules START // + +{{#each importedModuleTypes}} +{{#each methods}} +// URI: "{{../uri}}" // +public struct Args{{to_upper name}}: Codable { + {{#each arguments}} + var {{ name }}: {{to_swift (to_graphql_type this)}}, + {{/each}} +} + +{{/each}} +{{#if isInterface}} +public class {{detect_keyword (to_upper type)}} { + var uri: Uri + + public init(uri: Uri) { + self.uri = uri } - {{/with}} - // Env END // + {{#each methods}} + func {{name}}( + _ args: {{to_upper ../type}}Args{{to_upper name}}, + _ invoker: Invoker + ) throws -> {{#with return}}{{to_swift (to_graphql_type this)}}{{/with}} { + let serializedArgs = try encode(value: args) + return try invoker.invokeRaw( + uri: try Uri("{{../uri}}"), + method: "{{name}}", + args: serializedArgs, + env: nil, + ) + } + {{#if (is_not_last @index ../methods)}} - "#.to_string(); - } + {{/if}} + {{/each}} + + +} +{{else}} +public class {{detect_keyword (to_upper type)}} { + public init() {} + {{#each methods}} + + func {{name}}( + _ args: {{to_upper ../type}}Args{{to_upper name}}, + _ invoker: Invoker + ) throws -> {{#with return}}{{to_swift (to_graphql_type this)}}{{/with}} { + let serializedArgs = try encode(value: args) + return try invoker.invokeRaw( + uri: try Uri("{{../uri}}"), + method: "{{name}}", + args: serializedArgs, + env: nil, + ) + } + {{#if (is_not_last @index ../methods)}} + + {{/if}} + {{/each}} +} +{{/if}} +{{/each}} +// Imported Modules END // +"#.to_string(); +} use super::Template; diff --git a/implementations/plugin-swift/src/templates/mod.rs b/implementations/plugin-swift/src/templates/mod.rs new file mode 100644 index 00000000..beb4acaf --- /dev/null +++ b/implementations/plugin-swift/src/templates/mod.rs @@ -0,0 +1,14 @@ +mod Module_swift; +mod Types_swift; + +pub struct Template { + pub name: &'static str, + pub source: &'static str, +} + +pub fn load_templates() -> Vec