Skip to content

Commit 206ab18

Browse files
maskri17copybara-github
authored andcommitted
Enhance core string types with built-in manipulation methods by integrating common string operations, previously in extensions, as methods on the StringValue class.
PiperOrigin-RevId: 807720233
1 parent f4068db commit 206ab18

File tree

8 files changed

+540
-196
lines changed

8 files changed

+540
-196
lines changed

common/BUILD

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -627,10 +627,12 @@ cc_library(
627627
":native_type",
628628
":optional_ref",
629629
":type",
630+
":typeinfo",
630631
":unknown",
631632
":value_kind",
632633
"//base:attributes",
633634
"//common/internal:byte_string",
635+
"//common/internal:reference_count",
634636
"//eval/internal:cel_value_equal",
635637
"//eval/public:cel_value",
636638
"//eval/public:message_wrapper",
@@ -655,6 +657,7 @@ cc_library(
655657
"//internal:utf8",
656658
"//internal:well_known_types",
657659
"//runtime:runtime_options",
660+
"//runtime/internal:errors",
658661
"@com_google_absl//absl/base",
659662
"@com_google_absl//absl/base:core_headers",
660663
"@com_google_absl//absl/base:no_destructor",

common/value.h

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
#include "common/native_type.h"
4040
#include "common/optional_ref.h"
4141
#include "common/type.h"
42+
#include "common/typeinfo.h"
4243
#include "common/value_kind.h"
4344
#include "common/values/bool_value.h" // IWYU pragma: export
4445
#include "common/values/bytes_value.h" // IWYU pragma: export
@@ -2537,6 +2538,75 @@ ErrorValueAssign::operator()(absl::Status status) const {
25372538
return common_internal::ImplicitlyConvertibleStatus();
25382539
}
25392540

2541+
inline absl::StatusOr<Value> StringValue::Join(
2542+
const ListValue& list,
2543+
const google::protobuf::DescriptorPool* absl_nonnull descriptor_pool,
2544+
google::protobuf::MessageFactory* absl_nonnull message_factory,
2545+
google::protobuf::Arena* absl_nonnull arena) const {
2546+
ABSL_DCHECK(descriptor_pool != nullptr);
2547+
ABSL_DCHECK(message_factory != nullptr);
2548+
ABSL_DCHECK(arena != nullptr);
2549+
2550+
Value result;
2551+
CEL_RETURN_IF_ERROR(
2552+
Join(list, descriptor_pool, message_factory, arena, &result));
2553+
return result;
2554+
}
2555+
2556+
inline absl::StatusOr<Value> StringValue::Split(
2557+
const StringValue& delimiter, int64_t limit,
2558+
google::protobuf::Arena* absl_nonnull arena) const {
2559+
ABSL_DCHECK(arena != nullptr);
2560+
2561+
Value result;
2562+
CEL_RETURN_IF_ERROR(Split(delimiter, limit, arena, &result));
2563+
return result;
2564+
}
2565+
2566+
inline absl::Status StringValue::Split(const StringValue& delimiter,
2567+
google::protobuf::Arena* absl_nonnull arena,
2568+
Value* absl_nonnull result) const {
2569+
ABSL_DCHECK(arena != nullptr);
2570+
ABSL_DCHECK(result != nullptr);
2571+
2572+
return Split(delimiter, /*limit=*/-1, arena, result);
2573+
}
2574+
2575+
inline absl::StatusOr<Value> StringValue::Split(
2576+
const StringValue& delimiter, google::protobuf::Arena* absl_nonnull arena) const {
2577+
ABSL_DCHECK(arena != nullptr);
2578+
2579+
return Split(delimiter, /*limit=*/-1, arena);
2580+
}
2581+
2582+
inline absl::StatusOr<Value> StringValue::Replace(
2583+
const StringValue& needle, const StringValue& replacement, int64_t limit,
2584+
google::protobuf::Arena* absl_nonnull arena) const {
2585+
ABSL_DCHECK(arena != nullptr);
2586+
2587+
Value result;
2588+
CEL_RETURN_IF_ERROR(Replace(needle, replacement, limit, arena, &result));
2589+
return result;
2590+
}
2591+
2592+
inline absl::Status StringValue::Replace(const StringValue& needle,
2593+
const StringValue& replacement,
2594+
google::protobuf::Arena* absl_nonnull arena,
2595+
Value* absl_nonnull result) const {
2596+
ABSL_DCHECK(arena != nullptr);
2597+
ABSL_DCHECK(result != nullptr);
2598+
2599+
return Replace(needle, replacement, /*limit=*/-1, arena, result);
2600+
}
2601+
2602+
inline absl::StatusOr<Value> StringValue::Replace(
2603+
const StringValue& needle, const StringValue& replacement,
2604+
google::protobuf::Arena* absl_nonnull arena) const {
2605+
ABSL_DCHECK(arena != nullptr);
2606+
2607+
return Replace(needle, replacement, /*limit=*/-1, arena);
2608+
}
2609+
25402610
namespace common_internal {
25412611

25422612
template <typename Base>

0 commit comments

Comments
 (0)