Crates publish setup (#17)
* Added config.toml to waku crate * Update gitignore * Update readme * Remove private items docs * Fix docs links * Refactor waku to waku-bindings crate Added badges * Fix links * Add usage
This commit is contained in:
parent
c3ced48966
commit
d006ef4ecd
|
@ -1,3 +1,4 @@
|
||||||
/target
|
/target
|
||||||
/Cargo.lock
|
/Cargo.lock
|
||||||
/.idea
|
/.idea
|
||||||
|
/.fleet
|
|
@ -1,7 +1,7 @@
|
||||||
[workspace]
|
[workspace]
|
||||||
|
|
||||||
members = [
|
members = [
|
||||||
"waku",
|
"waku-bindings",
|
||||||
"waku-sys",
|
"waku-sys",
|
||||||
"examples/toy-chat"
|
"examples/toy-chat"
|
||||||
]
|
]
|
36
README.md
36
README.md
|
@ -1,3 +1,35 @@
|
||||||
# Waku Rust binding
|
# Waku Rust bindings
|
||||||
|
|
||||||
Rust layer on top of `go-waku` c ffi bindings.
|
Rust layer on top of [`go-waku`](https://github.com/status-im/go-waku) [c ffi bindings](https://github.com/status-im/go-waku/blob/v0.2.2/library/README.md).
|
||||||
|
|
||||||
|
|
||||||
|
## About [Waku](https://waku.org/)
|
||||||
|
|
||||||
|
Waku is the communication layer for Web3. Decentralized communication that scales.
|
||||||
|
|
||||||
|
Private. Secure. Runs anywhere.
|
||||||
|
|
||||||
|
### What is Waku?
|
||||||
|
|
||||||
|
Waku is a suite of privacy-preserving, peer-to-peer messaging protocols.
|
||||||
|
|
||||||
|
Waku removes centralized third parties from messaging, enabling private, secure, censorship-free communication with no single point of failure.
|
||||||
|
|
||||||
|
Waku provides privacy-preserving capabilities, such as sender anonymity,metadata protection and unlinkability to personally identifiable information.
|
||||||
|
|
||||||
|
Waku is designed for generalized messaging, enabling human-to-human, machine-to-machine or hybrid communication.
|
||||||
|
|
||||||
|
Waku runs everywhere: desktop, server, including resource-restricted devices, such as mobile devices and browsers.
|
||||||
|
How does it work?
|
||||||
|
|
||||||
|
The first version of Waku had its origins in the Whisper protocol, with optimizations for scalability and usability. Waku v2 is a complete rewrite. Its relay protocol implements pub/sub over libp2p, and also introduces additional capabilities:
|
||||||
|
|
||||||
|
1. Retrieving historical messages for mostly-offline devices.
|
||||||
|
2. Adaptive nodes, allowing for heterogeneous nodes to contribute.
|
||||||
|
3. Bandwidth preservation for light nodes.
|
||||||
|
|
||||||
|
This makes it ideal for running a p2p protocol on mobile, or in other similarly resource-restricted environments.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Read the [Waku docs](https://docs.wakuconnect.dev/)
|
|
@ -8,7 +8,7 @@ authors = [
|
||||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
waku = { path = "../../waku" }
|
waku = { path = "../../waku-bindings" }
|
||||||
tui = "0.19"
|
tui = "0.19"
|
||||||
crossterm = "0.25"
|
crossterm = "0.25"
|
||||||
unicode-width = "0.1"
|
unicode-width = "0.1"
|
||||||
|
|
|
@ -0,0 +1,4 @@
|
||||||
|
[target.'cfg(target_os = "macos")']
|
||||||
|
# when using osx, we need to link against some golang libraries, it did just work with this missing flags
|
||||||
|
# from: https://github.com/golang/go/issues/42459
|
||||||
|
rustflags = ["-C", "link-args=-framework CoreFoundation -framework Security"]
|
|
@ -0,0 +1,50 @@
|
||||||
|
# Waku Rust bindings
|
||||||
|
|
||||||
|
[<img alt="github" src="https://img.shields.io/badge/github-waku-org/waku-rust-bindings-8da0cb?style=for-the-badge&labelColor=555555&logo=github" height="20">](https://github.com/waku-org/waku-rust-bindings)
|
||||||
|
[<img alt="crates.io" src="https://img.shields.io/crates/v/waku-bindings.svg?style=for-the-badge&color=fc8d62&logo=rust" height="20">](https://crates.io/crates/waku-rust-bindings)
|
||||||
|
[<img alt="docs.rs" src="https://img.shields.io/badge/doc/waku-bindings-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs" height="20">](https://docs.rs/waku-rust-bindings)
|
||||||
|
[<img alt="build status" src="https://img.shields.io/github/workflow/status/waku-org/waku-rust-bindings/CI/master?style=for-the-badge" height="20">](https://github.com/waku-org/waku-rust-bindings/actions?query=branch%3Amaster)
|
||||||
|
|
||||||
|
Rust api on top of [`waku-sys`](https://crates.io/crates/waku-sys) bindgen bindings to [c ffi bindings](https://github.com/status-im/go-waku/blob/v0.2.2/library/README.md).
|
||||||
|
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
Add this to your `Cargo.toml`:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[dependencies]
|
||||||
|
waku-bindings = "0.1.0"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## About [Waku](https://waku.org/)
|
||||||
|
|
||||||
|
Waku is the communication layer for Web3. Decentralized communication that scales.
|
||||||
|
|
||||||
|
Private. Secure. Runs anywhere.
|
||||||
|
|
||||||
|
### What is Waku?
|
||||||
|
|
||||||
|
Waku is a suite of privacy-preserving, peer-to-peer messaging protocols.
|
||||||
|
|
||||||
|
Waku removes centralized third parties from messaging, enabling private, secure, censorship-free communication with no single point of failure.
|
||||||
|
|
||||||
|
Waku provides privacy-preserving capabilities, such as sender anonymity,metadata protection and unlinkability to personally identifiable information.
|
||||||
|
|
||||||
|
Waku is designed for generalized messaging, enabling human-to-human, machine-to-machine or hybrid communication.
|
||||||
|
|
||||||
|
Waku runs everywhere: desktop, server, including resource-restricted devices, such as mobile devices and browsers.
|
||||||
|
How does it work?
|
||||||
|
|
||||||
|
The first version of Waku had its origins in the Whisper protocol, with optimizations for scalability and usability. Waku v2 is a complete rewrite. Its relay protocol implements pub/sub over libp2p, and also introduces additional capabilities:
|
||||||
|
|
||||||
|
1. Retrieving historical messages for mostly-offline devices.
|
||||||
|
2. Adaptive nodes, allowing for heterogeneous nodes to contribute.
|
||||||
|
3. Bandwidth preservation for light nodes.
|
||||||
|
|
||||||
|
This makes it ideal for running a p2p protocol on mobile, or in other similarly resource-restricted environments.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Read the [Waku docs](https://docs.wakuconnect.dev/)
|
|
@ -38,7 +38,7 @@ pub fn waku_decode_symmetric(
|
||||||
|
|
||||||
/// Decrypt a message using a symmetric key
|
/// Decrypt a message using a symmetric key
|
||||||
///
|
///
|
||||||
/// As per the [specification](extern char* waku_decode_asymmetric(char* messageJson, char* privateKey))
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_decode_asymmetricchar-messagejson-char-privatekey)
|
||||||
pub fn waku_decode_asymmetric(
|
pub fn waku_decode_asymmetric(
|
||||||
message: &WakuMessage,
|
message: &WakuMessage,
|
||||||
asymmetric_key: &SecretKey,
|
asymmetric_key: &SecretKey,
|
|
@ -58,9 +58,9 @@ pub(crate) enum JsonResponse<T> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Waku response, just a `Result` with an `String` error.
|
/// Waku response, just a `Result` with an `String` error.
|
||||||
/// Convenient we can transform a [`JsonResponse`] into a [`std::result::Result`]
|
|
||||||
pub type Result<T> = std::result::Result<T, String>;
|
pub type Result<T> = std::result::Result<T, String>;
|
||||||
|
|
||||||
|
/// Convenient we can transform a [`JsonResponse`] into a [`std::result::Result`]
|
||||||
impl<T> From<JsonResponse<T>> for Result<T> {
|
impl<T> From<JsonResponse<T>> for Result<T> {
|
||||||
fn from(response: JsonResponse<T>) -> Self {
|
fn from(response: JsonResponse<T>) -> Self {
|
||||||
match response {
|
match response {
|
||||||
|
@ -127,14 +127,14 @@ impl WakuMessage {
|
||||||
|
|
||||||
/// Try decode the message with an expected symmetric key
|
/// Try decode the message with an expected symmetric key
|
||||||
///
|
///
|
||||||
/// wrapper around [`crate::decrypt::waku_decode_symmetric`]
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_decode_symmetricchar-messagejson-char-symmetrickey)
|
||||||
pub fn try_decode_symmetric(&self, symmetric_key: &Key<Aes256Gcm>) -> Result<DecodedPayload> {
|
pub fn try_decode_symmetric(&self, symmetric_key: &Key<Aes256Gcm>) -> Result<DecodedPayload> {
|
||||||
waku_decode_symmetric(self, symmetric_key)
|
waku_decode_symmetric(self, symmetric_key)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Try decode the message with an expected asymmetric key
|
/// Try decode the message with an expected asymmetric key
|
||||||
///
|
///
|
||||||
/// wrapper around [`crate::decrypt::waku_decode_asymmetric`]
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_decode_asymmetricchar-messagejson-char-privatekey)
|
||||||
pub fn try_decode_asymmetric(&self, asymmetric_key: &SecretKey) -> Result<DecodedPayload> {
|
pub fn try_decode_asymmetric(&self, asymmetric_key: &SecretKey) -> Result<DecodedPayload> {
|
||||||
waku_decode_asymmetric(self, asymmetric_key)
|
waku_decode_asymmetric(self, asymmetric_key)
|
||||||
}
|
}
|
|
@ -61,22 +61,19 @@ unsafe impl<State: WakuNodeState> Sync for WakuNodeHandle<State> {}
|
||||||
|
|
||||||
impl<State: WakuNodeState> WakuNodeHandle<State> {
|
impl<State: WakuNodeState> WakuNodeHandle<State> {
|
||||||
/// If the execution is successful, the result is the peer ID as a string (base58 encoded)
|
/// If the execution is successful, the result is the peer ID as a string (base58 encoded)
|
||||||
///
|
/// as per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_stop)
|
||||||
/// wrapper around [`management::waku_peer_id`]
|
|
||||||
pub fn peer_id(&self) -> Result<PeerId> {
|
pub fn peer_id(&self) -> Result<PeerId> {
|
||||||
management::waku_peer_id()
|
management::waku_peer_id()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get the multiaddresses the Waku node is listening to
|
/// Get the multiaddresses the Waku node is listening to
|
||||||
///
|
/// as per [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_listen_addresses)
|
||||||
/// wrapper around [`management::waku_listen_addresses`]
|
|
||||||
pub fn listen_addresses(&self) -> Result<Vec<Multiaddr>> {
|
pub fn listen_addresses(&self) -> Result<Vec<Multiaddr>> {
|
||||||
management::waku_listen_addresses()
|
management::waku_listen_addresses()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Add a node multiaddress and protocol to the waku node’s peerstore
|
/// Add a node multiaddress and protocol to the waku node’s peerstore.
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_add_peerchar-address-char-protocolid)
|
||||||
/// wrapper around [`peers::waku_add_peers`]
|
|
||||||
pub fn add_peer(&self, address: &Multiaddr, protocol_id: ProtocolId) -> Result<PeerId> {
|
pub fn add_peer(&self, address: &Multiaddr, protocol_id: ProtocolId) -> Result<PeerId> {
|
||||||
peers::waku_add_peers(address, protocol_id)
|
peers::waku_add_peers(address, protocol_id)
|
||||||
}
|
}
|
||||||
|
@ -91,16 +88,14 @@ fn stop_node() -> Result<()> {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl WakuNodeHandle<Initialized> {
|
impl WakuNodeHandle<Initialized> {
|
||||||
/// Start a Waku node mounting all the protocols that were enabled during the Waku node instantiation
|
/// Start a Waku node mounting all the protocols that were enabled during the Waku node instantiation.
|
||||||
///
|
/// as per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_start)
|
||||||
/// wrapper around [`management::waku_start`]
|
|
||||||
pub fn start(self) -> Result<WakuNodeHandle<Running>> {
|
pub fn start(self) -> Result<WakuNodeHandle<Running>> {
|
||||||
management::waku_start().map(|_| WakuNodeHandle(Default::default()))
|
management::waku_start().map(|_| WakuNodeHandle(Default::default()))
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Stops a Waku node
|
/// Stops a Waku node
|
||||||
///
|
/// as per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_stop)
|
||||||
/// internally uses [`management::waku_stop`]
|
|
||||||
pub fn stop(self) -> Result<()> {
|
pub fn stop(self) -> Result<()> {
|
||||||
stop_node()
|
stop_node()
|
||||||
}
|
}
|
||||||
|
@ -108,8 +103,7 @@ impl WakuNodeHandle<Initialized> {
|
||||||
|
|
||||||
impl WakuNodeHandle<Running> {
|
impl WakuNodeHandle<Running> {
|
||||||
/// Stops a Waku node
|
/// Stops a Waku node
|
||||||
///
|
/// as per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_stop)
|
||||||
/// internally uses [`management::waku_stop`]
|
|
||||||
pub fn stop(self) -> Result<()> {
|
pub fn stop(self) -> Result<()> {
|
||||||
stop_node()
|
stop_node()
|
||||||
}
|
}
|
||||||
|
@ -118,8 +112,7 @@ impl WakuNodeHandle<Running> {
|
||||||
/// If `timeout` as milliseconds doesn't fit into a `i32` it is clamped to [`i32::MAX`]
|
/// If `timeout` as milliseconds doesn't fit into a `i32` it is clamped to [`i32::MAX`]
|
||||||
/// If the function execution takes longer than `timeout` value, the execution will be canceled and an error returned.
|
/// If the function execution takes longer than `timeout` value, the execution will be canceled and an error returned.
|
||||||
/// Use 0 for no timeout
|
/// Use 0 for no timeout
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_connect_peerchar-address-int-timeoutms)
|
||||||
/// wrapper around [`peers::waku_connect_peer_with_address`]
|
|
||||||
pub fn connect_peer_with_address(
|
pub fn connect_peer_with_address(
|
||||||
&self,
|
&self,
|
||||||
address: &Multiaddr,
|
address: &Multiaddr,
|
||||||
|
@ -128,37 +121,35 @@ impl WakuNodeHandle<Running> {
|
||||||
peers::waku_connect_peer_with_address(address, timeout)
|
peers::waku_connect_peer_with_address(address, timeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Dial peer using its peer ID
|
/// Dial peer using a peer id
|
||||||
///
|
/// If `timeout` as milliseconds doesn't fit into a `i32` it is clamped to [`i32::MAX`]
|
||||||
/// wrapper around [`peers::waku_connect_peer_with_id`]
|
/// The peer must be already known.
|
||||||
|
/// It must have been added before with [`WakuNodeHandle::add_peer`] or previously dialed with [`WakuNodeHandle::connect_peer_with_address`]
|
||||||
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_connect_peeridchar-peerid-int-timeoutms)
|
||||||
pub fn connect_peer_with_id(&self, peer_id: PeerId, timeout: Option<Duration>) -> Result<()> {
|
pub fn connect_peer_with_id(&self, peer_id: PeerId, timeout: Option<Duration>) -> Result<()> {
|
||||||
peers::waku_connect_peer_with_id(peer_id, timeout)
|
peers::waku_connect_peer_with_id(peer_id, timeout)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Disconnect a peer using its peerID
|
/// Disconnect a peer using its peer id
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_disconnect_peerchar-peerid)
|
||||||
/// wrapper around [`peers::waku_disconnect_peer_with_id`]
|
|
||||||
pub fn disconnect_peer_with_id(&self, peer_id: &PeerId) -> Result<()> {
|
pub fn disconnect_peer_with_id(&self, peer_id: &PeerId) -> Result<()> {
|
||||||
peers::waku_disconnect_peer_with_id(peer_id)
|
peers::waku_disconnect_peer_with_id(peer_id)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Get number of connected peers
|
/// Get number of connected peers
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_peer_count)
|
||||||
/// wrapper around [`peers::waku_peer_count`]
|
|
||||||
pub fn peer_count(&self) -> Result<usize> {
|
pub fn peer_count(&self) -> Result<usize> {
|
||||||
peers::waku_peer_count()
|
peers::waku_peer_count()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Retrieve the list of peers known by the Waku node
|
/// Retrieve the list of peers known by the Waku node
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_peers)
|
||||||
/// wrapper around [`peers::waku_peers`]
|
|
||||||
pub fn peers(&self) -> Result<WakuPeers> {
|
pub fn peers(&self) -> Result<WakuPeers> {
|
||||||
peers::waku_peers()
|
peers::waku_peers()
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Publish a message using Waku Relay
|
/// Publish a message using Waku Relay
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_relay_publishchar-messagejson-char-pubsubtopic-int-timeoutms)
|
||||||
/// wrapper around [`relay::waku_relay_publish_message`]
|
|
||||||
pub fn relay_publish_message(
|
pub fn relay_publish_message(
|
||||||
&self,
|
&self,
|
||||||
message: &WakuMessage,
|
message: &WakuMessage,
|
||||||
|
@ -169,8 +160,7 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Optionally sign, encrypt using asymmetric encryption and publish a message using Waku Relay
|
/// Optionally sign, encrypt using asymmetric encryption and publish a message using Waku Relay
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_relay_publish_enc_asymmetricchar-messagejson-char-pubsubtopic-char-publickey-char-optionalsigningkey-int-timeoutms)
|
||||||
/// wrapper around [`relay::waku_relay_publish_encrypt_asymmetric`]
|
|
||||||
pub fn relay_publish_encrypt_asymmetric(
|
pub fn relay_publish_encrypt_asymmetric(
|
||||||
&self,
|
&self,
|
||||||
message: &WakuMessage,
|
message: &WakuMessage,
|
||||||
|
@ -189,8 +179,7 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Optionally sign, encrypt using symmetric encryption and publish a message using Waku Relay
|
/// Optionally sign, encrypt using symmetric encryption and publish a message using Waku Relay
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_relay_publish_enc_symmetricchar-messagejson-char-pubsubtopic-char-symmetrickey-char-optionalsigningkey-int-timeoutms)
|
||||||
/// wrapper around [`relay::waku_relay_publish_encrypt_symmetric`]
|
|
||||||
pub fn relay_publish_encrypt_symmetric(
|
pub fn relay_publish_encrypt_symmetric(
|
||||||
&self,
|
&self,
|
||||||
message: &WakuMessage,
|
message: &WakuMessage,
|
||||||
|
@ -209,29 +198,24 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Determine if there are enough peers to publish a message on a given pubsub topic
|
/// Determine if there are enough peers to publish a message on a given pubsub topic
|
||||||
///
|
|
||||||
/// wrapper around [`relay::waku_enough_peers`]
|
|
||||||
pub fn relay_enough_peers(&self, pubsub_topic: Option<WakuPubSubTopic>) -> Result<bool> {
|
pub fn relay_enough_peers(&self, pubsub_topic: Option<WakuPubSubTopic>) -> Result<bool> {
|
||||||
relay::waku_enough_peers(pubsub_topic)
|
relay::waku_enough_peers(pubsub_topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Subscribe to a Waku Relay pubsub topic to receive messages
|
/// Subscribe to a Waku Relay pubsub topic to receive messages
|
||||||
///
|
|
||||||
/// wrapper around [`relay::waku_relay_subscribe`]
|
|
||||||
pub fn relay_subscribe(&self, pubsub_topic: Option<WakuPubSubTopic>) -> Result<()> {
|
pub fn relay_subscribe(&self, pubsub_topic: Option<WakuPubSubTopic>) -> Result<()> {
|
||||||
relay::waku_relay_subscribe(pubsub_topic)
|
relay::waku_relay_subscribe(pubsub_topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Closes the pubsub subscription to a pubsub topic. No more messages will be received from this pubsub topic
|
/// Closes the pubsub subscription to a pubsub topic. No more messages will be received from this pubsub topic
|
||||||
///
|
|
||||||
/// wrapper around [`relay::waku_relay_unsubscribe`]
|
|
||||||
pub fn relay_unsubscribe(&self, pubsub_topic: Option<WakuPubSubTopic>) -> Result<()> {
|
pub fn relay_unsubscribe(&self, pubsub_topic: Option<WakuPubSubTopic>) -> Result<()> {
|
||||||
relay::waku_relay_unsubscribe(pubsub_topic)
|
relay::waku_relay_unsubscribe(pubsub_topic)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Retrieves historical messages on specific content topics
|
/// Retrieves historical messages on specific content topics. This method may be called with [`PagingOptions`](`crate::general::PagingOptions`),
|
||||||
///
|
/// to retrieve historical messages on a per-page basis. If the request included [`PagingOptions`](`crate::general::PagingOptions`),
|
||||||
/// wrapper around [`store::waku_store_query`]
|
/// the node must return messages on a per-page basis and include [`PagingOptions`](`crate::general::PagingOptions`) in the response.
|
||||||
|
/// These [`PagingOptions`](`crate::general::PagingOptions`) must contain a cursor pointing to the Index from which a new page can be requested
|
||||||
pub fn store_query(
|
pub fn store_query(
|
||||||
&self,
|
&self,
|
||||||
query: &StoreQuery,
|
query: &StoreQuery,
|
||||||
|
@ -242,8 +226,7 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Publish a message using Waku Lightpush
|
/// Publish a message using Waku Lightpush
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_lightpush_publishchar-messagejson-char-topic-char-peerid-int-timeoutms)
|
||||||
/// wrapper around [`lightpush::waku_lightpush_publish`]
|
|
||||||
pub fn lightpush_publish(
|
pub fn lightpush_publish(
|
||||||
&self,
|
&self,
|
||||||
message: &WakuMessage,
|
message: &WakuMessage,
|
||||||
|
@ -255,8 +238,7 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Optionally sign, encrypt using asymmetric encryption and publish a message using Waku Lightpush
|
/// Optionally sign, encrypt using asymmetric encryption and publish a message using Waku Lightpush
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_lightpush_publish_enc_asymmetricchar-messagejson-char-pubsubtopic-char-peerid-char-publickey-char-optionalsigningkey-int-timeoutms)
|
||||||
/// wrapper around [`lightpush::waku_lightpush_publish_encrypt_asymmetric`]
|
|
||||||
pub fn lightpush_publish_encrypt_asymmetric(
|
pub fn lightpush_publish_encrypt_asymmetric(
|
||||||
&self,
|
&self,
|
||||||
message: &WakuMessage,
|
message: &WakuMessage,
|
||||||
|
@ -277,8 +259,7 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Optionally sign, encrypt using symmetric encryption and publish a message using Waku Lightpush
|
/// Optionally sign, encrypt using symmetric encryption and publish a message using Waku Lightpush
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_lightpush_publish_enc_symmetricchar-messagejson-char-pubsubtopic-char-peerid-char-symmetrickey-char-optionalsigningkey-int-timeoutms)
|
||||||
/// wrapper around [`lightpush::waku_lightpush_publish_encrypt_symmetric`]
|
|
||||||
pub fn lightpush_publish_encrypt_symmetric(
|
pub fn lightpush_publish_encrypt_symmetric(
|
||||||
&self,
|
&self,
|
||||||
message: &WakuMessage,
|
message: &WakuMessage,
|
||||||
|
@ -299,8 +280,7 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a subscription in a lightnode for messages that matches a content filter and optionally a [`WakuPubSubTopic`](`crate::general::WakuPubSubTopic`)
|
/// Creates a subscription in a lightnode for messages that matches a content filter and optionally a [`WakuPubSubTopic`](`crate::general::WakuPubSubTopic`)
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_filter_subscribechar-filterjson-char-peerid-int-timeoutms)
|
||||||
/// wrapper around [`filter::waku_filter_subscribe`]
|
|
||||||
pub fn filter_subscribe(
|
pub fn filter_subscribe(
|
||||||
&self,
|
&self,
|
||||||
filter_subscription: &FilterSubscription,
|
filter_subscription: &FilterSubscription,
|
||||||
|
@ -311,8 +291,7 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Removes subscriptions in a light node matching a content filter and, optionally, a [`WakuPubSubTopic`](`crate::general::WakuPubSubTopic`)
|
/// Removes subscriptions in a light node matching a content filter and, optionally, a [`WakuPubSubTopic`](`crate::general::WakuPubSubTopic`)
|
||||||
///
|
/// As per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_filter_unsubscribechar-filterjson-int-timeoutms)
|
||||||
/// wrapper around [`filter::waku_filter_unsubscribe`]
|
|
||||||
pub fn filter_unsubscribe(
|
pub fn filter_unsubscribe(
|
||||||
&self,
|
&self,
|
||||||
filter_subscription: &FilterSubscription,
|
filter_subscription: &FilterSubscription,
|
||||||
|
@ -331,8 +310,8 @@ impl WakuNodeHandle<Running> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Spawn a new Waku node with the givent configuration (default configuration if `None` provided)
|
/// Spawn a new Waku node with the given configuration (default configuration if `None` provided)
|
||||||
/// Internally uses [`management::waku_new`]
|
/// as per the [specification](https://rfc.vac.dev/spec/36/#extern-char-waku_newchar-jsonconfig)
|
||||||
pub fn waku_new(config: Option<WakuNodeConfig>) -> Result<WakuNodeHandle<Initialized>> {
|
pub fn waku_new(config: Option<WakuNodeConfig>) -> Result<WakuNodeHandle<Initialized>> {
|
||||||
let mut node_initialized = WAKU_NODE_INITIALIZED
|
let mut node_initialized = WAKU_NODE_INITIALIZED
|
||||||
.lock()
|
.lock()
|
|
@ -158,7 +158,7 @@ impl WakuPeerData {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// List of [`WakuPeerData`], return value from [`waku_peers`] funtion
|
/// List of [`WakuPeerData`]
|
||||||
pub type WakuPeers = Vec<WakuPeerData>;
|
pub type WakuPeers = Vec<WakuPeerData>;
|
||||||
|
|
||||||
/// Retrieve the list of peers known by the Waku node
|
/// Retrieve the list of peers known by the Waku node
|
|
@ -28,7 +28,7 @@ pub fn waku_create_content_topic(
|
||||||
.try_into()
|
.try_into()
|
||||||
.expect("Version should fit within an u32"),
|
.expect("Version should fit within an u32"),
|
||||||
CString::new(content_topic_name)
|
CString::new(content_topic_name)
|
||||||
.expect("Conmtent topic should always transform to CString")
|
.expect("Content topic should always transform to CString")
|
||||||
.into_raw(),
|
.into_raw(),
|
||||||
CString::new(encoding.to_string())
|
CString::new(encoding.to_string())
|
||||||
.expect("Encoding should always transform to CString")
|
.expect("Encoding should always transform to CString")
|
|
@ -0,0 +1,51 @@
|
||||||
|
# Waku rust bindgen bindings
|
||||||
|
|
||||||
|
[<img alt="github" src="https://img.shields.io/badge/github-waku-org/waku-sys-8da0cb?style=for-the-badge&labelColor=555555&logo=github" height="20">](https://github.com/waku-org/waku-rust-bindings)
|
||||||
|
[<img alt="crates.io" src="https://img.shields.io/crates/v/waku-sys.svg?style=for-the-badge&color=fc8d62&logo=rust" height="20">](https://crates.io/crates/waku-rust-bindings)
|
||||||
|
[<img alt="docs.rs" src="https://img.shields.io/badge/doc/waku-sys-66c2a5?style=for-the-badge&labelColor=555555&logo=docs.rs" height="20">](https://docs.rs/waku-rust-bindings)
|
||||||
|
[<img alt="build status" src="https://img.shields.io/github/workflow/status/waku-org/waku-rust-bindings/CI/master?style=for-the-badge" height="20">](https://github.com/waku-org/waku-rust-bindings/actions?query=branch%3Amaster)
|
||||||
|
|
||||||
|
Rust layer on top of [`go-waku`](https://github.com/status-im/go-waku) [c ffi bindings](https://github.com/status-im/go-waku/blob/v0.2.2/library/README.md).
|
||||||
|
|
||||||
|
## Usage
|
||||||
|
|
||||||
|
This are autogenerated, if you are looking for a proper Rust API version check on [`waku-bindings`](https://crates.io/crates/waku-bindings)
|
||||||
|
|
||||||
|
Add this to your `Cargo.toml`:
|
||||||
|
|
||||||
|
```toml
|
||||||
|
[dependencies]
|
||||||
|
waku-sys = "0.1.0"
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
## About [Waku](https://waku.org/)
|
||||||
|
|
||||||
|
Waku is the communication layer for Web3. Decentralized communication that scales.
|
||||||
|
|
||||||
|
Private. Secure. Runs anywhere.
|
||||||
|
|
||||||
|
### What is Waku?
|
||||||
|
|
||||||
|
Waku is a suite of privacy-preserving, peer-to-peer messaging protocols.
|
||||||
|
|
||||||
|
Waku removes centralized third parties from messaging, enabling private, secure, censorship-free communication with no single point of failure.
|
||||||
|
|
||||||
|
Waku provides privacy-preserving capabilities, such as sender anonymity,metadata protection and unlinkability to personally identifiable information.
|
||||||
|
|
||||||
|
Waku is designed for generalized messaging, enabling human-to-human, machine-to-machine or hybrid communication.
|
||||||
|
|
||||||
|
Waku runs everywhere: desktop, server, including resource-restricted devices, such as mobile devices and browsers.
|
||||||
|
How does it work?
|
||||||
|
|
||||||
|
The first version of Waku had its origins in the Whisper protocol, with optimizations for scalability and usability. Waku v2 is a complete rewrite. Its relay protocol implements pub/sub over libp2p, and also introduces additional capabilities:
|
||||||
|
|
||||||
|
1. Retrieving historical messages for mostly-offline devices.
|
||||||
|
2. Adaptive nodes, allowing for heterogeneous nodes to contribute.
|
||||||
|
3. Bandwidth preservation for light nodes.
|
||||||
|
|
||||||
|
This makes it ideal for running a p2p protocol on mobile, or in other similarly resource-restricted environments.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Read the [Waku docs](https://docs.wakuconnect.dev/)
|
Loading…
Reference in New Issue