1 /// Windows `HResult` enum implementation and helper functions.
2 module tern.hresult;
3 
4 import tern.accessors : exempt;
5 
6 public @exempt enum HResult
7 {
8     S_OK = 0x00000000,
9     S_FALSE = 0x00000001,
10     E_ABORT = 0x80004004,
11     E_FAIL = 0x80004005,
12     E_NOINTERFACE = 0x80004002,
13     E_NOTIMPL = 0x80004001,
14     E_POINTER = 0x80004003,
15     E_UNEXPECTED = 0x8000FFFF,
16 
17     E_ACCESSDENIED = 0x80070005,
18     E_HANDLE = 0x80070006,
19     E_INVALIDARG = 0x80070057,
20     E_OUTOFMEMORY = 0x8007000E,
21     E_BADIMAGEFORMAT = 0x8007000B,
22     E_BOUNDS = 0x8000000B,
23     E_PENDING = 0x8000000A,
24     E_NOT_SET = 0x80070490,
25 
26     CO_E_NOTINITIALIZED = 0x800401F0,
27     CO_E_ALREADYINITIALIZED = 0x800401F1,
28     CO_E_NOTSUPPORTED = 0x80004021,
29     CO_E_CLASSSTRING = 0x800401F3,
30     CO_E_APPNOTFOUND = 0x800401F5,
31     CO_E_OBJECTNOTCONNECTED = 0x800401FD,
32 
33     DISP_E_BADINDEX = 0x8002000B,
34     DISP_E_OVERFLOW = 0x8002000A,
35     DISP_E_TYPEMISMATCH = 0x80020005,
36     DISP_E_PARAMNOTFOUND = 0x80020004,
37     DISP_E_UNKNOWNINTERFACE = 0x80020001,
38 
39     RPC_E_CHANGED_MODE = 0x80010106,
40     RPC_E_TOO_LATE = 0x80010119,
41     RPC_E_INVALIDMETHOD = 0x80010104,
42     RPC_E_DISCONNECTED = 0x80010108,
43     RPC_E_SERVERFAULT = 0x80010105,
44     RPC_E_TIMEOUT = 0x8001011F,
45     RPC_E_NOT_REGISTERED = 0x80010103,
46     RPC_E_DUPLICATE_NAME = 0x8001012C,
47 }
48 
49 public:
50 static:
51 pure:
52 @nogc:
53 /// Checks HResult
54 bool OK(HResult hr)
55 {
56     return hr == HResult.S_OK;
57 }
58 
59 /// ditto
60 bool NOTOK(HResult hr)
61 {
62     return hr != HResult.S_OK;
63 }
64 
65 /// ditto
66 bool FALSE(HResult hr)
67 {
68     return hr == HResult.S_FALSE;
69 }
70 
71 /// ditto
72 bool ABORT(HResult hr)
73 {
74     return hr == HResult.E_ABORT;
75 }
76 
77 /// ditto
78 bool FAIL(HResult hr)
79 {
80     return hr == HResult.E_FAIL;
81 }
82 
83 /// ditto
84 bool NOINTERFACE(HResult hr)
85 {
86     return hr == HResult.E_NOINTERFACE;
87 }
88 
89 /// ditto
90 bool NOTIMPL(HResult hr)
91 {
92     return hr == HResult.E_NOTIMPL;
93 }
94 
95 /// ditto
96 bool POINTER(HResult hr)
97 {
98     return hr == HResult.E_POINTER;
99 }
100 
101 /// ditto
102 bool UNEXPECTED(HResult hr)
103 {
104     return hr == HResult.E_UNEXPECTED;
105 }
106 
107 /// ditto
108 bool ACCESSDENIED(HResult hr)
109 {
110     return hr == HResult.E_ACCESSDENIED;
111 }
112 
113 /// ditto
114 bool HANDLE(HResult hr)
115 {
116     return hr == HResult.E_HANDLE;
117 }
118 
119 /// ditto
120 bool INVALIDARG(HResult hr)
121 {
122     return hr == HResult.E_INVALIDARG;
123 }
124 
125 /// ditto
126 bool OUTOFMEMORY(HResult hr)
127 {
128     return hr == HResult.E_OUTOFMEMORY;
129 }
130 
131 /// ditto
132 bool BADIMAGEFORMAT(HResult hr)
133 {
134     return hr == HResult.E_BADIMAGEFORMAT;
135 }
136 
137 /// ditto
138 bool BOUNDS(HResult hr)
139 {
140     return hr == HResult.E_BOUNDS;
141 }
142 
143 /// ditto
144 bool PENDING(HResult hr)
145 {
146     return hr == HResult.E_PENDING;
147 }
148 
149 /// ditto
150 bool NOT_SET(HResult hr)
151 {
152     return hr == HResult.E_NOT_SET;
153 }
154 
155 /// ditto
156 bool NOTINITIALIZED(HResult hr)
157 {
158     return hr == HResult.CO_E_NOTINITIALIZED;
159 }
160 
161 /// ditto
162 bool ALREADYINITIALIZED(HResult hr)
163 {
164     return hr == HResult.CO_E_ALREADYINITIALIZED;
165 }
166 
167 /// ditto
168 bool NOTSUPPORTED(HResult hr)
169 {
170     return hr == HResult.CO_E_NOTSUPPORTED;
171 }
172 
173 /// ditto
174 bool CLASSSTRING(HResult hr)
175 {
176     return hr == HResult.CO_E_CLASSSTRING;
177 }
178 
179 /// ditto
180 bool APPNOTFOUND(HResult hr)
181 {
182     return hr == HResult.CO_E_APPNOTFOUND;
183 }
184 
185 /// ditto
186 bool OBJECTNOTCONNECTED(HResult hr)
187 {
188     return hr == HResult.CO_E_OBJECTNOTCONNECTED;
189 }
190 
191 /// ditto
192 bool BADINDEX(HResult hr)
193 {
194     return hr == HResult.DISP_E_BADINDEX;
195 }
196 
197 /// ditto
198 bool OVERFLOW(HResult hr)
199 {
200     return hr == HResult.DISP_E_OVERFLOW;
201 }
202 
203 /// ditto
204 bool TYPEMISMATCH(HResult hr)
205 {
206     return hr == HResult.DISP_E_TYPEMISMATCH;
207 }
208 
209 /// ditto
210 bool PARAMNOTFOUND(HResult hr)
211 {
212     return hr == HResult.DISP_E_PARAMNOTFOUND;
213 }
214 
215 /// ditto
216 bool UNKNOWNINTERFACE(HResult hr)
217 {
218     return hr == HResult.DISP_E_UNKNOWNINTERFACE;
219 }
220 
221 /// ditto
222 bool CHANGEDMODE(HResult hr)
223 {
224     return hr == HResult.RPC_E_CHANGED_MODE;
225 }
226 
227 /// ditto
228 bool TOOLATE(HResult hr)
229 {
230     return hr == HResult.RPC_E_TOO_LATE;
231 }
232 
233 /// ditto
234 bool INVALIDMETHOD(HResult hr)
235 {
236     return hr == HResult.RPC_E_INVALIDMETHOD;
237 }
238 
239 /// ditto
240 bool DISCONNECTED(HResult hr)
241 {
242     return hr == HResult.RPC_E_DISCONNECTED;
243 }
244 
245 /// ditto
246 bool SERVERFAULT(HResult hr)
247 {
248     return hr == HResult.RPC_E_SERVERFAULT;
249 }
250 
251 /// ditto
252 bool TIMEOUT(HResult hr)
253 {
254     return hr == HResult.RPC_E_TIMEOUT;
255 }
256 
257 /// ditto
258 bool NOTREGISTERED(HResult hr)
259 {
260     return hr == HResult.RPC_E_NOT_REGISTERED;
261 }
262 
263 /// ditto
264 bool DUPLICATENAME(HResult hr)
265 {
266     return hr == HResult.RPC_E_DUPLICATE_NAME;
267 }