1 /* 2 * Copyright 2018-present Amazon.com, Inc. or its affiliates. All Rights Reserved. 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"). 5 * You may not use this file except in compliance with the License. 6 * A copy of the License is located at 7 * 8 * http://aws.amazon.com/apache2.0 9 * 10 * or in the "license" file accompanying this file. This file is distributed 11 * on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either 12 * express or implied. See the License for the specific language governing 13 * permissions and limitations under the License. 14 */ 15 16 module aws.lambda_runtime.outcome; 17 18 class Outcome(TResult, TFailure) 19 { 20 this(TResult s) 21 { 22 this.s = s; 23 this.success = true; 24 25 } 26 27 this(TFailure f) 28 { 29 this.f = f; 30 this.success = false; 31 } 32 33 this(Outcome other) 34 { 35 this.success = other.success; 36 37 if (success) { 38 s = other.s; 39 } 40 else 41 { 42 f = other.f; 43 } 44 } 45 46 TResult getResult() 47 { 48 assert(success); 49 return s; 50 } 51 52 TFailure getFailure() 53 { 54 assert(!success); 55 return f; 56 } 57 58 bool isSuccess() 59 { 60 return success; 61 } 62 63 private: 64 union { 65 TResult s; 66 TFailure f; 67 }; 68 bool success; 69 };