MCPcopy Create free account
hub / github.com/cel-expr/cel-cpp / JsonEqualsState

Class JsonEqualsState

internal/json.cc:1776–1881  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1774namespace {
1775
1776class JsonEqualsState final {
1777 public:
1778 explicit JsonEqualsState(const JsonAccessor* absl_nonnull lhs_accessor,
1779 const JsonAccessor* absl_nonnull rhs_accessor)
1780 : lhs_accessor_(lhs_accessor), rhs_accessor_(rhs_accessor) {}
1781
1782 bool ValueEqual(const google::protobuf::MessageLite& lhs,
1783 const google::protobuf::MessageLite& rhs) {
1784 auto lhs_kind_case = lhs_accessor_->GetKindCase(lhs);
1785 if (lhs_kind_case == google::protobuf::Value::KIND_NOT_SET) {
1786 lhs_kind_case = google::protobuf::Value::kNullValue;
1787 }
1788 auto rhs_kind_case = rhs_accessor_->GetKindCase(rhs);
1789 if (rhs_kind_case == google::protobuf::Value::KIND_NOT_SET) {
1790 rhs_kind_case = google::protobuf::Value::kNullValue;
1791 }
1792 if (lhs_kind_case != rhs_kind_case) {
1793 return false;
1794 }
1795 switch (lhs_kind_case) {
1796 case google::protobuf::Value::KIND_NOT_SET:
1797 ABSL_UNREACHABLE();
1798 case google::protobuf::Value::kNullValue:
1799 return true;
1800 case google::protobuf::Value::kBoolValue:
1801 return lhs_accessor_->GetBoolValue(lhs) ==
1802 rhs_accessor_->GetBoolValue(rhs);
1803 case google::protobuf::Value::kNumberValue:
1804 return lhs_accessor_->GetNumberValue(lhs) ==
1805 rhs_accessor_->GetNumberValue(rhs);
1806 case google::protobuf::Value::kStringValue:
1807 return lhs_accessor_->GetStringValue(lhs, lhs_scratch_) ==
1808 rhs_accessor_->GetStringValue(rhs, rhs_scratch_);
1809 case google::protobuf::Value::kListValue:
1810 return ListValueEqual(lhs_accessor_->GetListValue(lhs),
1811 rhs_accessor_->GetListValue(rhs));
1812 case google::protobuf::Value::kStructValue:
1813 return StructEqual(lhs_accessor_->GetStructValue(lhs),
1814 rhs_accessor_->GetStructValue(rhs));
1815 default:
1816 // Should not get here, but if for some terrible reason
1817 // `google.protobuf.Value` is expanded, default to false.
1818 return false;
1819 }
1820 }
1821
1822 bool ListValueEqual(const google::protobuf::MessageLite& lhs,
1823 const google::protobuf::MessageLite& rhs) {
1824 const int lhs_size = lhs_accessor_->ValuesSize(lhs);
1825 const int rhs_size = rhs_accessor_->ValuesSize(rhs);
1826 if (lhs_size != rhs_size) {
1827 return false;
1828 }
1829 for (int i = 0; i < lhs_size; ++i) {
1830 if (!ValueEqual(lhs_accessor_->Values(lhs, i),
1831 rhs_accessor_->Values(rhs, i))) {
1832 return false;
1833 }

Callers 3

JsonEqualsFunction · 0.85
JsonListEqualsFunction · 0.85
JsonMapEqualsFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected