Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,11 @@
# Changelog

## Unreleased

**Features**:

- Add `sentry_value_get_key(value, index)` function. ([#1142](https://github.com/getsentry/sentry-native/pull/1142))

## 0.7.20

**Features**:
Expand Down
6 changes: 6 additions & 0 deletions include/sentry.h
Original file line number Diff line number Diff line change
Expand Up @@ -290,6 +290,12 @@ SENTRY_API sentry_value_t sentry_value_get_by_key_owned(
SENTRY_API sentry_value_t sentry_value_get_by_key_owned_n(
sentry_value_t value, const char *k, size_t k_len);

/**
* Returns a key in a map by index. If missing or value is not a map,
* an empty string is returned.
*/
SENTRY_API const char *sentry_value_get_key(sentry_value_t value, size_t index);

/**
* Looks up a value in a list by index. If missing a null value is returned.
* The returned value is borrowed.
Expand Down
13 changes: 13 additions & 0 deletions src/sentry_value.c
Original file line number Diff line number Diff line change
Expand Up @@ -778,6 +778,19 @@ sentry_value_get_by_key_owned(sentry_value_t value, const char *k)
return rv;
}

const char *
sentry_value_get_key(sentry_value_t value, size_t index)
{
const thing_t *thing = value_as_thing(value);
if (thing && thing_get_type(thing) == THING_TYPE_OBJECT) {
obj_t *o = thing->payload._ptr;
if (index < o->len) {
return o->pairs[index].k;
}
}
return "";
}

sentry_value_t
sentry_value_get_by_index(sentry_value_t value, size_t index)
{
Expand Down
2 changes: 2 additions & 0 deletions tests/unit/test_value.c
Original file line number Diff line number Diff line change
Expand Up @@ -252,8 +252,10 @@ SENTRY_TEST(value_object)
sentry_value_t child = sentry_value_get_by_key(val, key);
if (i < 10) {
TEST_CHECK(sentry_value_as_int32(child) == (int32_t)i);
TEST_CHECK(strcmp(sentry_value_get_key(val, i), key) == 0);
} else {
TEST_CHECK(sentry_value_is_null(child));
TEST_CHECK(strlen(sentry_value_get_key(val, i)) == 0);
}
}

Expand Down