Skip to content

Commit

Permalink
Add publisher_put_(string|integer|float)
Browse files Browse the repository at this point in the history
  • Loading branch information
pojiro committed Jan 21, 2024
1 parent 36621d5 commit 48b748b
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 8 deletions.
6 changes: 4 additions & 2 deletions lib/zenohex/nif.ex
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,10 @@ defmodule Zenohex.Nif do
:erlang.nif_error(:nif_not_loaded)
end

def publisher_put(_publisher, _value) do
:erlang.nif_error(:nif_not_loaded)
for type <- ["string", "integer", "float"] do
def unquote(:"publisher_put_#{type}")(_publisher, _value) do
:erlang.nif_error(:nif_not_loaded)
end
end

def declare_subscriber(_session, _key_expr) do
Expand Down
23 changes: 21 additions & 2 deletions native/zenohex_nif/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -53,7 +53,24 @@ fn declare_publisher(env: Env, resource: ResourceArc<ExSessionRef>, key_expr: St
}

#[rustler::nif]
fn publisher_put(resource: ResourceArc<ExPublisherRef>, value: String) -> Atom {
fn publisher_put_string(resource: ResourceArc<ExPublisherRef>, value: String) -> Atom {
publisher_put_impl(resource, value)
}

#[rustler::nif]
fn publisher_put_integer(resource: ResourceArc<ExPublisherRef>, value: i64) -> Atom {
publisher_put_impl(resource, value)
}

#[rustler::nif]
fn publisher_put_float(resource: ResourceArc<ExPublisherRef>, value: f64) -> Atom {
publisher_put_impl(resource, value)
}

fn publisher_put_impl<T: Into<zenoh::value::Value>>(
resource: ResourceArc<ExPublisherRef>,
value: T,
) -> Atom {
let publisher: &Publisher = &resource.0;
match publisher.put(value).res_sync() {
Ok(()) => atom::ok(),
Expand Down Expand Up @@ -103,7 +120,9 @@ rustler::init!(
test_thread,
zenoh_open,
declare_publisher,
publisher_put,
publisher_put_string,
publisher_put_integer,
publisher_put_float,
declare_subscriber,
subscriber_recv_timeout
],
Expand Down
12 changes: 8 additions & 4 deletions test/zenohex/nif_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,13 @@ defmodule Zenohex.NifTest do
assert is_reference(Nif.declare_publisher(session, "key/expression"))
end

test "publisher_put/2", %{session: session} do
publisher = Nif.declare_publisher(session, "key/expression")
assert Nif.publisher_put(publisher, "value") == :ok
for {type, value} <- [{"string", "value"}, {"integer", 0}, {"float", 0.0}] do
test "publisher_put_#{type}/2", %{session: session} do
type = unquote(type)
value = unquote(value)
publisher = Nif.declare_publisher(session, "key/expression")
assert apply(Nif, :"publisher_put_#{type}", [publisher, value]) == :ok
end
end
end

Expand All @@ -37,7 +41,7 @@ defmodule Zenohex.NifTest do
publisher = Nif.declare_publisher(session, "key/expression")
subscriber = Nif.declare_subscriber(session, "key/expression")

Nif.publisher_put(publisher, "value")
Nif.publisher_put_string(publisher, "value")
assert Nif.subscriber_recv_timeout(subscriber, 1000) == "value"
assert Nif.subscriber_recv_timeout(subscriber, 1000) == :timeout
end
Expand Down

0 comments on commit 48b748b

Please sign in to comment.