| // Licensed to the Apache Software Foundation (ASF) under one |
| // or more contributor license agreements. See the NOTICE file |
| // distributed with this work for additional information |
| // regarding copyright ownership. The ASF licenses this file |
| // to you under the Apache License, Version 2.0 (the |
| // "License"); you may not use this file except in compliance |
| // with the License. You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, |
| // software distributed under the License is distributed on an |
| // "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| // KIND, either express or implied. See the License for the |
| // specific language governing permissions and limitations |
| // under the License. |
| |
| import Foundation |
| import Thrift |
| import Common |
| |
| class ThriftTestImpl : ThriftTest { |
| |
| /// Prints "testVoid()" and returns nothing. |
| /// |
| /// - Throws: |
| func testVoid() throws { |
| print("testVoid()") |
| } |
| |
| /// Prints 'testString("%s")' with thing as '%s' |
| /// @param string thing - the string to print |
| /// @return string - returns the string 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: String |
| /// - Throws: |
| func testString(thing: String) throws -> String { |
| print("testString(\"\(thing)\")") |
| return thing |
| } |
| |
| /// Prints 'testBool("%s")' where '%s' with thing as 'true' or 'false' |
| /// @param bool thing - the bool data to print |
| /// @return bool - returns the bool 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Bool |
| /// - Throws: |
| func testBool(thing: Bool) throws -> Bool { |
| print("testBool\"(\(thing ? "true" : "false")\")") |
| return thing |
| } |
| |
| /// Prints 'testByte("%d")' with thing as '%d' |
| /// The types i8 and byte are synonyms, use of i8 is encouraged, byte still exists for the sake of compatibility. |
| /// @param byte thing - the i8/byte to print |
| /// @return i8 - returns the i8/byte 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Int8 |
| /// - Throws: |
| func testByte(thing: Int8) throws -> Int8 { |
| print("testByte(\"\(thing)\")") |
| return thing |
| } |
| |
| |
| /// Prints 'testI32("%d")' with thing as '%d' |
| /// @param i32 thing - the i32 to print |
| /// @return i32 - returns the i32 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Int32 |
| /// - Throws: |
| func testI32(thing: Int32) throws -> Int32 { |
| print("testI32(\"\(thing)\")") |
| return thing |
| } |
| |
| |
| /// Prints 'testI64("%d")' with thing as '%d' |
| /// @param i64 thing - the i64 to print |
| /// @return i64 - returns the i64 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Int64 |
| /// - Throws: |
| func testI64(thing: Int64) throws -> Int64 { |
| print("testI64(\"\(thing)\")") |
| return thing |
| } |
| |
| |
| /// Prints 'testDouble("%f")' with thing as '%f' |
| /// @param double thing - the double to print |
| /// @return double - returns the double 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Double |
| /// - Throws: |
| func testDouble(thing: Double) throws -> Double { |
| print("testDouble(\"\(thing)\")") |
| return thing |
| } |
| |
| |
| /// Prints 'testBinary("%s")' where '%s' is a hex-formatted string of thing's data |
| /// @param binary thing - the binary data to print |
| /// @return binary - returns the binary 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Data |
| /// - Throws: |
| func testBinary(thing: Data) throws -> Data { |
| print("testBinary(\"\(thing)\")") |
| return thing |
| } |
| |
| |
| /// Prints 'testStruct("{%s}")' where thing has been formatted into a string of comma separated values |
| /// @param Xtruct thing - the Xtruct to print |
| /// @return Xtruct - returns the Xtruct 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Xtruct |
| /// - Throws: |
| func testStruct(thing: Xtruct) throws -> Xtruct { |
| print("testStruct({\([thing.string_thing, "\(thing.byte_thing)", "\(thing.i32_thing)", "\(thing.i64_thing)"].joined(separator: ", "))})") |
| return thing |
| } |
| |
| |
| /// Prints 'testNest("{%s}")' where thing has been formatted into a string of the nested struct |
| /// @param Xtruct2 thing - the Xtruct2 to print |
| /// @return Xtruct2 - returns the Xtruct2 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Xtruct2 |
| /// - Throws: |
| func testNest(thing: Xtruct2) throws -> Xtruct2 { |
| print("testNest(\(thing)") |
| return thing |
| } |
| |
| |
| /// Prints 'testMap("{%s")' where thing has been formatted into a string of 'key => value' pairs |
| /// separated by commas and new lines |
| /// @param map<i32,i32> thing - the map<i32,i32> to print |
| /// @return map<i32,i32> - returns the map<i32,i32> 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: TMap<Int32, Int32> |
| /// - Throws: |
| func testMap(thing: TMap<Int32, Int32>) throws -> TMap<Int32, Int32> { |
| print("testMap(\(thing)") |
| return thing |
| } |
| |
| |
| /// Prints 'testStringMap("{%s}")' where thing has been formatted into a string of 'key => value' pairs |
| /// separated by commas and new lines |
| /// @param map<string,string> thing - the map<string,string> to print |
| /// @return map<string,string> - returns the map<string,string> 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: TMap<String, String> |
| /// - Throws: |
| func testStringMap(thing: TMap<String, String>) throws -> TMap<String, String> { |
| print("testStringMap(\(thing)") |
| return thing |
| } |
| |
| |
| /// Prints 'testSet("{%s}")' where thing has been formatted into a string of values |
| /// separated by commas and new lines |
| /// @param set<i32> thing - the set<i32> to print |
| /// @return set<i32> - returns the set<i32> 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: TSet<Int32> |
| /// - Throws: |
| func testSet(thing: TSet<Int32>) throws -> TSet<Int32> { |
| print("testSet\(thing)") |
| return thing |
| } |
| |
| |
| /// Prints 'testList("{%s}")' where thing has been formatted into a string of values |
| /// separated by commas and new lines |
| /// @param list<i32> thing - the list<i32> to print |
| /// @return list<i32> - returns the list<i32> 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: TList<Int32> |
| /// - Throws: |
| func testList(thing: TList<Int32>) throws -> TList<Int32> { |
| print("testList\(thing)") |
| return thing |
| } |
| |
| |
| /// Prints 'testEnum("%d")' where thing has been formatted into its numeric value |
| /// @param Numberz thing - the Numberz to print |
| /// @return Numberz - returns the Numberz 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: Numberz |
| /// - Throws: |
| func testEnum(thing: Numberz) throws -> Numberz { |
| print("testEnum\(thing.rawValue)") |
| return thing |
| } |
| |
| |
| /// Prints 'testTypedef("%d")' with thing as '%d' |
| /// @param UserId thing - the UserId to print |
| /// @return UserId - returns the UserId 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: UserId |
| /// - Throws: |
| func testTypedef(thing: UserId) throws -> UserId { |
| print("testTypedef(\(thing)") |
| return thing |
| } |
| |
| |
| /// Prints 'testMapMap("%d")' with hello as '%d' |
| /// @param i32 hello - the i32 to print |
| /// @return map<i32,map<i32,i32>> - returns a dictionary with these values: |
| /// {-4 => {-4 => -4, -3 => -3, -2 => -2, -1 => -1, }, 4 => {1 => 1, 2 => 2, 3 => 3, 4 => 4, }, } |
| /// |
| /// - Parameters: |
| /// - hello: |
| /// - Returns: TMap<Int32, TMap<Int32, Int32>> |
| /// - Throws: |
| func testMapMap(hello: Int32) throws -> TMap<Int32, TMap<Int32, Int32>> { |
| print("testMapMap(\(hello)") |
| return TMap<Int32, TMap<Int32, Int32>>([ |
| -4: [-4: -4, -3: -3, -2: -2, -1: -1], |
| 4: [4: 4, 3: 3, 2: 2, 1: 1] |
| ]) |
| } |
| |
| |
| /// So you think you've got this all worked out, eh? |
| /// Creates a map with these values and prints it out: |
| /// { 1 => { 2 => argument, |
| /// 3 => argument, |
| /// }, |
| /// 2 => { 6 => <empty Insanity struct>, }, |
| /// } |
| /// @return map<UserId, map<Numberz,Insanity>> - a map with the above values |
| /// |
| /// - Parameters: |
| /// - argument: |
| /// - Returns: TMap<UserId, TMap<Numberz, Insanity>> |
| /// - Throws: |
| func testInsanity(argument: Insanity) throws -> TMap<UserId, TMap<Numberz, Insanity>> { |
| return TMap<UserId, TMap<Numberz, Insanity>>([ |
| 1: [ |
| .two: argument, |
| .three: argument |
| ], |
| 2: [ |
| .six: Insanity(userMap: [:], xtructs: []) |
| ] |
| ]) |
| } |
| |
| |
| /// Prints 'testMulti()' |
| /// @param i8 arg0 - |
| /// @param i32 arg1 - |
| /// @param i64 arg2 - |
| /// @param map<i16, string> arg3 - |
| /// @param Numberz arg4 - |
| /// @param UserId arg5 - |
| /// @return Xtruct - returns an Xtruct with string_thing = "Hello2, byte_thing = arg0, i32_thing = arg1 |
| /// and i64_thing = arg2 |
| /// |
| /// - Parameters: |
| /// - arg0: |
| /// - arg1: |
| /// - arg2: |
| /// - arg3: |
| /// - arg4: |
| /// - arg5: |
| /// - Returns: Xtruct |
| /// - Throws: |
| func testMulti(arg0: Int8, arg1: Int32, arg2: Int64, arg3: TMap<Int16, String>, arg4: Numberz, arg5: UserId) throws -> Xtruct { |
| print("testMulti()") |
| return Xtruct(string_thing: "Hello2", byte_thing: arg0, i32_thing: arg1, i64_thing: arg2) |
| } |
| |
| |
| /// Print 'testException(%s)' with arg as '%s' |
| /// @param string arg - a string indication what type of exception to throw |
| /// if arg == "Xception" throw Xception with errorCode = 1001 and message = arg |
| /// else if arg == "TException" throw TException |
| /// else do not throw anything |
| /// |
| /// - Parameters: |
| /// - arg: |
| /// - Throws: Xception |
| func testException(arg: String) throws { |
| print("testException(\(arg)") |
| if arg == "Xception" { |
| throw Xception(errorCode: 1001, message: arg) |
| } else if arg == "TException" { |
| throw TApplicationError() // is type TError (TException Swift equiv) |
| } |
| } |
| |
| |
| /// Print 'testMultiException(%s, %s)' with arg0 as '%s' and arg1 as '%s' |
| /// @param string arg - a string indicating what type of exception to throw |
| /// if arg0 == "Xception" throw Xception with errorCode = 1001 and message = "This is an Xception" |
| /// else if arg0 == "Xception2" throw Xception2 with errorCode = 2002 and struct_thing.string_thing = "This is an Xception2" |
| /// else do not throw anything |
| /// @return Xtruct - an Xtruct with string_thing = arg1 |
| /// |
| /// - Parameters: |
| /// - arg0: |
| /// - arg1: |
| /// - Returns: Xtruct |
| /// - Throws: Xception, Xception2 |
| func testMultiException(arg0: String, arg1: String) throws -> Xtruct { |
| print("testMultiException(\(arg0), \(arg1)") |
| if arg0 == "Xception" { |
| throw Xception(errorCode: 1001, message: "This is an Xception") |
| } else if arg0 == "Xception2" { |
| throw Xception2(errorCode: 2002, struct_thing: Xtruct(string_thing: "This is an Xception2", byte_thing: 0, i32_thing: 0, i64_thing: 0)) |
| } |
| return Xtruct(string_thing: arg1, byte_thing: 0, i32_thing: 0, i64_thing: 0) |
| } |
| |
| |
| /// Print 'testOneway(%d): Sleeping...' with secondsToSleep as '%d' |
| /// sleep 'secondsToSleep' |
| /// Print 'testOneway(%d): done sleeping!' with secondsToSleep as '%d' |
| /// @param i32 secondsToSleep - the number of seconds to sleep |
| /// |
| /// - Parameters: |
| /// - secondsToSleep: |
| /// - Throws: |
| func testOneway(secondsToSleep: Int32) throws { |
| print("testOneway(\(secondsToSleep): Sleeping...") |
| Thread.sleep(forTimeInterval: TimeInterval(secondsToSleep)) |
| } |
| |
| func testUuid(thing: UUID) throws -> UUID { |
| print("testUuid(\(thing))") |
| return thing |
| } |
| } |
| |
| class SecondServiceImpl : SecondService { |
| |
| /// Prints 'testString("%s")' with thing as '%s' |
| /// @param string thing - the string to print |
| /// @return string - returns the string 'thing' |
| /// |
| /// - Parameters: |
| /// - thing: |
| /// - Returns: String |
| /// - Throws: |
| func secondtestString(thing: String) throws -> String { |
| print("testString(\"\(thing)\")") |
| return thing |
| } |
| } |
| |