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 };