Google OR-Tools: ortools/base/status_builder.h Source File

1

2

3

4

5

6

7

8

9

10

11

12

13

14#ifndef ORTOOLS_BASE_STATUS_BUILDER_H_

15#define ORTOOLS_BASE_STATUS_BUILDER_H_

16

17#include <ios>

18#include <sstream>

19#include <string>

20#include <utility>

21

22#include "absl/status/status.h"

23#include "absl/strings/str_cat.h"

24

25namespace util {

26

28 public:

30 : base_status_(code, {}) {}

31

33 : base_status_(std::move(status)) {}

34

36 : base_status_(other.base_status_),

37 ss_(other.ss_.str(), std::ios_base::app) {}

39 base_status_ = other.base_status_;

40 ss_ = std::ostringstream(other.ss_.str(), std::ios_base::app);

41 return *this;

42 }

43

45 : base_status_(std::exchange(other.base_status_, absl::OkStatus())),

46 ss_(std::move(other.ss_)) {}

48 base_status_ = std::exchange(other.base_status_, absl::OkStatus());

49 ss_ = std::move(other.ss_);

50 return *this;

51 }

52

53 operator absl::Status() const {

54 const std::string annotation = ss_.str();

55 if (annotation.empty()) {

56 return base_status_;

57 }

58 if (base_status_.message().empty()) {

59 return absl::Status(base_status_.code(), annotation);

60 }

61 const std::string annotated_message =

62 absl::StrCat(base_status_.message(), "; ", annotation);

63 return absl::Status(base_status_.code(), annotated_message);

64 }

65

66 template <class T>

68 ss_ << t;

69 return *this;

70 }

71

73

74 private:

75 absl::Status base_status_;

76 std::ostringstream ss_;

77};

78

82

86

90

94

96 return StatusBuilder(absl::StatusCode::kDeadlineExceeded);

97}

98

100 return StatusBuilder(absl::StatusCode::kFailedPrecondition);

101}

102

106

108 return StatusBuilder(absl::StatusCode::kInvalidArgument);

109}

110

114

118

120 return StatusBuilder(absl::StatusCode::kPermissionDenied);

121}

122

124 return StatusBuilder(absl::StatusCode::kUnauthenticated);

125}

126

128 return StatusBuilder(absl::StatusCode::kResourceExhausted);

129}

130

134

138

142

143}

144

145#endif

StatusBuilder(const absl::Status status)

Definition status_builder.h:32

StatusBuilder & operator<<(const T &t)

Definition status_builder.h:67

StatusBuilder & operator=(StatusBuilder &&other)

Definition status_builder.h:47

StatusBuilder(const StatusBuilder &other)

Definition status_builder.h:35

StatusBuilder & SetAppend()

Definition status_builder.h:72

StatusBuilder & operator=(const StatusBuilder &other)

Definition status_builder.h:38

StatusBuilder(const absl::StatusCode code)

Definition status_builder.h:29

StatusBuilder(StatusBuilder &&other)

Definition status_builder.h:44

StatusBuilder ResourceExhaustedErrorBuilder()

Definition status_builder.h:127

StatusBuilder UnknownErrorBuilder()

Definition status_builder.h:139

StatusBuilder InternalErrorBuilder()

Definition status_builder.h:103

StatusBuilder UnimplementedErrorBuilder()

Definition status_builder.h:135

StatusBuilder UnavailableErrorBuilder()

Definition status_builder.h:131

StatusBuilder DataLossErrorBuilder()

Definition status_builder.h:91

StatusBuilder UnauthenticatedErrorBuilder()

Definition status_builder.h:123

StatusBuilder AbortedErrorBuilder()

Definition status_builder.h:79

StatusBuilder AlreadyExistsErrorBuilder()

Definition status_builder.h:83

StatusBuilder OutOfRangeErrorBuilder()

Definition status_builder.h:115

StatusBuilder CancelledErrorBuilder()

Definition status_builder.h:87

StatusBuilder PermissionDeniedErrorBuilder()

Definition status_builder.h:119

StatusBuilder InvalidArgumentErrorBuilder()

Definition status_builder.h:107

StatusBuilder DeadlineExceededErrorBuilder()

Definition status_builder.h:95

StatusBuilder FailedPreconditionErrorBuilder()

Definition status_builder.h:99

StatusBuilder NotFoundErrorBuilder()

Definition status_builder.h:111