blob: a853950662e9cc4d8b4bfb1e5353d53c1878ea72 [file] [log] [blame]
// Copyright 2019 Google LLC
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// https://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
#include "third_party/mlir_edge/iree/base/internal/status_builder.h"
#include <cstdio>
#include "third_party/mlir_edge/iree/base/internal/status_errors.h"
namespace iree {
StatusBuilder::StatusBuilder(const Status& original_status,
absl::SourceLocation location)
: status_(original_status), loc_(location) {}
StatusBuilder::StatusBuilder(Status&& original_status,
absl::SourceLocation location)
: status_(original_status), loc_(location) {}
StatusBuilder::StatusBuilder(const StatusBuilder& sb)
: status_(sb.status_), loc_(sb.loc_), message_(sb.message_) {}
StatusBuilder::StatusBuilder(StatusCode code, absl::SourceLocation location)
: status_(code, ""), loc_(location) {}
StatusBuilder& StatusBuilder::operator=(const StatusBuilder& sb) {
status_ = sb.status_;
loc_ = sb.loc_;
message_ = sb.message_;
return *this;
}
StatusBuilder::operator Status() const& {
return StatusBuilder(*this).CreateStatus();
}
StatusBuilder::operator Status() && { return std::move(*this).CreateStatus(); }
bool StatusBuilder::ok() const { return status_.ok(); }
StatusCode StatusBuilder::code() const { return status_.code(); }
absl::SourceLocation StatusBuilder::source_location() const { return loc_; }
Status StatusBuilder::CreateStatus() && {
Status result = JoinMessageToStatus(status_, message_);
// Reset the status after consuming it.
status_ = UnknownError("");
message_ = "";
return result;
}
Status StatusBuilder::JoinMessageToStatus(Status s, absl::string_view msg) {
if (msg.empty()) return s;
return Annotate(s, msg);
}
std::ostream& operator<<(std::ostream& os, const StatusBuilder& builder) {
return os << static_cast<Status>(builder);
}
std::ostream& operator<<(std::ostream& os, StatusBuilder&& builder) {
return os << static_cast<Status>(std::move(builder));
}
StatusBuilder AbortedErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kAborted, location);
}
StatusBuilder AlreadyExistsErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kAlreadyExists, location);
}
StatusBuilder CancelledErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kCancelled, location);
}
StatusBuilder DataLossErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kDataLoss, location);
}
StatusBuilder DeadlineExceededErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kDeadlineExceeded, location);
}
StatusBuilder FailedPreconditionErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kFailedPrecondition, location);
}
StatusBuilder InternalErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kInternal, location);
}
StatusBuilder InvalidArgumentErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kInvalidArgument, location);
}
StatusBuilder NotFoundErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kNotFound, location);
}
StatusBuilder OutOfRangeErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kOutOfRange, location);
}
StatusBuilder PermissionDeniedErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kPermissionDenied, location);
}
StatusBuilder UnauthenticatedErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kUnauthenticated, location);
}
StatusBuilder ResourceExhaustedErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kResourceExhausted, location);
}
StatusBuilder UnavailableErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kUnavailable, location);
}
StatusBuilder UnimplementedErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kUnimplemented, location);
}
StatusBuilder UnknownErrorBuilder(absl::SourceLocation location) {
return StatusBuilder(StatusCode::kUnknown, location);
}
} // namespace iree