• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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