1 // Copyright 2013 The Flutter Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef FLUTTER_FML_STATUS_H_
6 #define FLUTTER_FML_STATUS_H_
7
8 #include <string_view>
9
10 namespace fml {
11
12 enum class StatusCode {
13 kOk,
14 kCancelled,
15 kUnknown,
16 kInvalidArgument,
17 kDeadlineExceeded,
18 kNotFound,
19 kAlreadyExists,
20 kPermissionDenied,
21 kResourceExhausted,
22 kFailedPrecondition,
23 kAborted,
24 kOutOfRange,
25 kUnimplemented,
26 kInternal,
27 kUnavailable,
28 kDataLoss,
29 kUnauthenticated
30 };
31
32 /// Class that represents the resolution of the execution of a procedure. This
33 /// is used similarly to how exceptions might be used, typically as the return
34 /// value to a synchronous procedure or an argument to an asynchronous callback.
35 class Status final {
36 public:
37 /// Creates an 'ok' status.
38 Status();
39
40 Status(fml::StatusCode code, std::string_view message);
41
42 fml::StatusCode code() const;
43
44 /// A noop that helps with static analysis tools if you decide to ignore an
45 /// error.
46 void IgnoreError() const;
47
48 /// @return 'true' when the code is kOk.
49 bool ok() const;
50
51 std::string_view message() const;
52
53 private:
54 fml::StatusCode code_;
55 std::string_view message_;
56 };
57
Status()58 inline Status::Status() : code_(fml::StatusCode::kOk), message_() {}
59
Status(fml::StatusCode code,std::string_view message)60 inline Status::Status(fml::StatusCode code, std::string_view message)
61 : code_(code), message_(message) {}
62
code()63 inline fml::StatusCode Status::code() const {
64 return code_;
65 }
66
IgnoreError()67 inline void Status::IgnoreError() const {
68 // noop
69 }
70
ok()71 inline bool Status::ok() const {
72 return code_ == fml::StatusCode::kOk;
73 }
74
message()75 inline std::string_view Status::message() const {
76 return message_;
77 }
78
79 } // namespace fml
80
81 #endif // FLUTTER_FML_SIZE_H_
82