-
Notifications
You must be signed in to change notification settings - Fork 440
Expand file tree
/
Copy pathinstance_resource.cc
More file actions
59 lines (50 loc) · 1.96 KB
/
instance_resource.cc
File metadata and controls
59 lines (50 loc) · 1.96 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
// Copyright 2022 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 "google/cloud/bigtable/instance_resource.h"
#include "google/cloud/internal/make_status.h"
#include <ostream>
#include <regex>
namespace google {
namespace cloud {
namespace bigtable {
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_BEGIN
InstanceResource::InstanceResource(Project project, std::string instance_id)
: project_(std::move(project)), instance_id_(std::move(instance_id)) {}
std::string InstanceResource::FullName() const {
return project_.FullName() + "/instances/" + instance_id_;
}
bool operator==(InstanceResource const& a, InstanceResource const& b) {
return a.project_ == b.project_ && a.instance_id_ == b.instance_id_;
}
bool operator!=(InstanceResource const& a, InstanceResource const& b) {
return !(a == b);
}
std::ostream& operator<<(std::ostream& os, InstanceResource const& in) {
return os << in.FullName();
}
StatusOr<InstanceResource> MakeInstanceResource(std::string const& full_name) {
std::regex re("projects/([^/]+)/instances/([^/]+)");
std::smatch matches;
if (!std::regex_match(full_name, matches, re)) {
return internal::InvalidArgumentError(
"Improperly formatted InstanceResource: " + full_name,
GCP_ERROR_INFO());
}
return InstanceResource(Project(std::move(matches[1])),
std::move(matches[2]));
}
GOOGLE_CLOUD_CPP_INLINE_NAMESPACE_END
} // namespace bigtable
} // namespace cloud
} // namespace google