blob: 5548e9030d73227badd0b0434d8bc2e6492936ea [file] [log] [blame]
// 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
}
}