diff --git a/include/zenoh-pico/api/primitives.h b/include/zenoh-pico/api/primitives.h index 15119e3d0..346b7f5ef 100644 --- a/include/zenoh-pico/api/primitives.h +++ b/include/zenoh-pico/api/primitives.h @@ -93,10 +93,23 @@ z_owned_str_t z_keyexpr_to_string(z_keyexpr_t keyexpr); * * Returns: * The :c:type:`z_bytes_t` pointing to key expression string representation if it's possible - */ z_bytes_t z_keyexpr_as_bytes(z_keyexpr_t keyexpr); +/** + * Indicates if the key expression has been declared but don't guarantee it's still in session. + * + * If given keyexpr was declared, to retrieve the keyexpr string representation the user must use + * :c:func:zp_keyexpr_resolve + * + * Parameters: + * keyexpr: A loaned instance of :c:type:`z_keyexpr_t` + * + * Returns: + * Returns ``true`` if the keyexpr was declared or ``false`` otherwise. + */ +_Bool zp_keyexpr_was_declared(const z_keyexpr_t *keyexpr); + /** * Constructs a null-terminated string departing from a :c:type:`z_keyexpr_t` for a given :c:type:`z_session_t`. * The user is responsible of dropping the returned string using ``zp_free``. diff --git a/src/api/api.c b/src/api/api.c index 67695f516..09c692385 100644 --- a/src/api/api.c +++ b/src/api/api.c @@ -78,6 +78,14 @@ z_bytes_t z_keyexpr_as_bytes(z_keyexpr_t keyexpr) { } } +_Bool zp_keyexpr_was_declared(const z_keyexpr_t *keyexpr) { + _Bool ret = false; + if (keyexpr->_id != Z_RESOURCE_ID_NONE) { + ret = true; + } + return ret; +} + z_owned_str_t zp_keyexpr_resolve(z_session_t zs, z_keyexpr_t keyexpr) { z_owned_str_t ret = {._value = NULL};