diff --git a/dojo.h b/dojo.h index 1759b9d..f6e6e5a 100644 --- a/dojo.h +++ b/dojo.h @@ -638,6 +638,8 @@ struct ResultToriiClient client_new(const char *torii_url, const char *libp2p_relay_url, struct FieldElement world); +void client_set_logger(struct ToriiClient *client, void (*logger)(const char*)); + struct ResultCArrayu8 client_publish_message(struct ToriiClient *client, const char *message, struct Signature signature); diff --git a/dojo.hpp b/dojo.hpp index e74dfce..f007b63 100644 --- a/dojo.hpp +++ b/dojo.hpp @@ -847,6 +847,8 @@ Result client_new(const char *torii_url, const char *libp2p_relay_url, FieldElement world); +void client_set_logger(ToriiClient *client, void (*logger)(const char*)); + Result> client_publish_message(ToriiClient *client, const char *message, Signature signature); diff --git a/src/c/mod.rs b/src/c/mod.rs index e532b25..10d5a8f 100644 --- a/src/c/mod.rs +++ b/src/c/mod.rs @@ -69,9 +69,21 @@ pub unsafe extern "C" fn client_new( Result::Ok(Box::into_raw(Box::new(ToriiClient { inner: client, runtime, + logger: None, }))) } +#[no_mangle] +#[allow(clippy::missing_safety_doc)] +pub unsafe extern "C" fn client_set_logger( + client: *mut ToriiClient, + logger: extern "C" fn(*const c_char), +) { + unsafe { + (*client).logger = Some(logger); + } +} + #[no_mangle] #[allow(clippy::missing_safety_doc)] pub unsafe extern "C" fn client_publish_message( @@ -127,9 +139,7 @@ pub unsafe extern "C" fn client_entities( client: *mut ToriiClient, query: &Query, ) -> Result> { - let query = (&query.clone()).into(); - - let entities_future = unsafe { (*client).inner.entities(query) }; + let entities_future = unsafe { (*client).inner.entities(query.into()) }; match (*client).runtime.block_on(entities_future) { Ok(entities) => { @@ -147,9 +157,7 @@ pub unsafe extern "C" fn client_event_messages( client: *mut ToriiClient, query: &Query, ) -> Result> { - let query = (&query.clone()).into(); - - let event_messages_future = unsafe { (*client).inner.event_messages(query) }; + let event_messages_future = unsafe { (*client).inner.event_messages(query.into()) }; match (*client).runtime.block_on(event_messages_future) { Ok(event_messages) => { diff --git a/src/c/types.rs b/src/c/types.rs index 229969a..92c8214 100644 --- a/src/c/types.rs +++ b/src/c/types.rs @@ -41,7 +41,7 @@ impl From> for COption { } impl From> for Option { - fn from(val: COption) -> Self { +fn from(val: COption) -> Self { match val { COption::Some(v) => Some(v), COption::None => None, @@ -154,6 +154,7 @@ impl From<&Call> for starknet::core::types::FunctionCall { pub struct ToriiClient { pub inner: Client, pub runtime: tokio::runtime::Runtime, + pub logger: Option, } #[derive(Clone, Debug)] @@ -874,8 +875,8 @@ impl From<&KeysClause> for torii_grpc::types::KeysClause { torii_grpc::types::KeysClause { keys: keys .iter() - .map(|o| o.as_ref().map(Into::into)) - .map(Into::into) + .map(|o| o.clone().into()) + .map(|o: Option| o.as_ref().map(Into::into)) .collect(), pattern_matching: (&val.pattern_matching).into(), models: models @@ -891,8 +892,8 @@ impl From<&torii_grpc::types::KeysClause> for KeysClause { let keys = val .keys .iter() - .map(|o| o.as_ref().map(|k| k.into())) - .map(Into::into) + .map(|o| o.clone().into()) + .map(|o: COption<_>| o.as_ref().map(Into::into)) .collect::>>(); let models = val .models