General types (#1)
* Added JsonResponse type * Add dependencies * Added wakumessage * Adjust go build to link with missing simbols on osx * Added general types * Nitpick in docs
This commit is contained in:
parent
7ce8cadaa5
commit
7b7ba2975d
|
@ -163,6 +163,12 @@ dependencies = [
|
||||||
"hashbrown",
|
"hashbrown",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "itoa"
|
||||||
|
version = "1.0.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6c8af84674fe1f223a982c933a0ee1086ac4d4052aa0fb8060c12c6ad838e754"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
|
@ -281,6 +287,43 @@ version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ryu"
|
||||||
|
version = "1.0.11"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde"
|
||||||
|
version = "1.0.145"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "728eb6351430bccb993660dfffc5a72f91ccc1295abaa8ce19b27ebe4f75568b"
|
||||||
|
dependencies = [
|
||||||
|
"serde_derive",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_derive"
|
||||||
|
version = "1.0.145"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "81fa1584d3d1bcacd84c277a0dfe21f5b0f6accf4a23d04d4c6d61f1af522b4c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "serde_json"
|
||||||
|
version = "1.0.85"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e55a28e3aaef9d5ce0506d0a14dbba8054ddc7e499ef522dd8b26859ec9d4a44"
|
||||||
|
dependencies = [
|
||||||
|
"itoa",
|
||||||
|
"ryu",
|
||||||
|
"serde",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "shlex"
|
name = "shlex"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
@ -293,6 +336,17 @@ version = "0.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "syn"
|
||||||
|
version = "1.0.100"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "52205623b1b0f064a4e71182c3b18ae902267282930c6d5462c91b859668426e"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"unicode-ident",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "termcolor"
|
name = "termcolor"
|
||||||
version = "1.1.3"
|
version = "1.1.3"
|
||||||
|
@ -318,6 +372,8 @@ checksum = "dcc811dc4066ac62f84f11307873c4850cb653bfa9b1719cee2bd2204a4bc5dd"
|
||||||
name = "waku"
|
name = "waku"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
"waku-sys",
|
"waku-sys",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,9 @@ name = "waku-sys"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
|
[lib]
|
||||||
|
crate-type = ["rlib"]
|
||||||
|
|
||||||
# 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]
|
||||||
|
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit b6ff0386129fcbc34c04f08ac45ea3e19cfd3e44
|
Subproject commit 5b42c98780fe938ff79c54229aa80cdd47a17568
|
|
@ -6,4 +6,6 @@ edition = "2021"
|
||||||
# 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-sys = { path = "../waku-sys" }
|
waku-sys = { path = "../waku-sys" }
|
||||||
|
serde = { version = "1.0", features = ["derive"] }
|
||||||
|
serde_json = "1.0"
|
|
@ -0,0 +1,128 @@
|
||||||
|
// std
|
||||||
|
// crates
|
||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
// internal
|
||||||
|
|
||||||
|
/// JsonResponse wrapper.
|
||||||
|
/// `go-waku` ffi returns this type as a `char *` as per the [specification](https://rfc.vac.dev/spec/36/#jsonresponse-type)
|
||||||
|
/// This is internal, as it is better to use rust plain `Result` type.
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
#[serde(rename_all = "snake_case")]
|
||||||
|
pub(crate) enum JsonResponse<T> {
|
||||||
|
Result(T),
|
||||||
|
Error(String),
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Waku response, just a `Result` with an `String` error.
|
||||||
|
/// Convenient we can transform a [`JsonResponse`] into a [`Response`] (`Result`)
|
||||||
|
type Response<T> = Result<T, String>;
|
||||||
|
|
||||||
|
impl<T> From<JsonResponse<T>> for Response<T> {
|
||||||
|
fn from(response: JsonResponse<T>) -> Self {
|
||||||
|
match response {
|
||||||
|
JsonResponse::Result(t) => Ok(t),
|
||||||
|
JsonResponse::Error(e) => Err(e),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/// JsonMessage, Waku message in JSON format.
|
||||||
|
/// as per the [specification](https://rfc.vac.dev/spec/36/#jsonmessage-type)
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct WakuMessage {
|
||||||
|
payload: Box<[u8]>,
|
||||||
|
/// The content topic to be set on the message
|
||||||
|
content_topic: String,
|
||||||
|
/// The Waku Message version number
|
||||||
|
version: usize,
|
||||||
|
/// Unix timestamp in nanoseconds
|
||||||
|
timestamp: usize,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// A payload once decoded, used when a received Waku Message is encrypted
|
||||||
|
pub struct DecodedPayload {
|
||||||
|
/// Public key that signed the message (optional), hex encoded with 0x prefix
|
||||||
|
public_key: Option<String>,
|
||||||
|
/// Message signature (optional), hex encoded with 0x prefix
|
||||||
|
signature: Option<String>,
|
||||||
|
/// Decrypted message payload base64 encoded
|
||||||
|
data: String,
|
||||||
|
/// Padding base64 encoded
|
||||||
|
padding: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The content topic of a Waku message
|
||||||
|
/// as per the [specification](https://rfc.vac.dev/spec/36/#contentfilter-type)
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct ContentFilter {
|
||||||
|
/// The content topic of a Waku message
|
||||||
|
content_topic: String,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The criteria to create subscription to a light node in JSON Format
|
||||||
|
/// as per the [specification](https://rfc.vac.dev/spec/36/#filtersubscription-type)
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct FilterSubscription {
|
||||||
|
/// Array of [`ContentFilter`] being subscribed to / unsubscribed from
|
||||||
|
content_filters: Vec<ContentFilter>,
|
||||||
|
/// Optional pubsub topic
|
||||||
|
pubsub_topic: Option<String>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Criteria used to retrieve historical messages
|
||||||
|
#[derive(Serialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct StoreQuery {
|
||||||
|
/// The pubsub topic on which messages are published
|
||||||
|
pubsub_topic: Option<String>,
|
||||||
|
/// Array of [`ContentFilter`] to query for historical messages
|
||||||
|
content_filters: Vec<ContentFilter>,
|
||||||
|
/// The inclusive lower bound on the timestamp of queried messages.
|
||||||
|
/// This field holds the Unix epoch time in nanoseconds
|
||||||
|
start_time: Option<usize>,
|
||||||
|
/// The inclusive upper bound on the timestamp of queried messages.
|
||||||
|
/// This field holds the Unix epoch time in nanoseconds
|
||||||
|
end_time: Option<usize>,
|
||||||
|
/// Paging information in [`PagingOptions`] format
|
||||||
|
paging_options: Option<PagingOptions>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// The response received after doing a query to a store node
|
||||||
|
#[derive(Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct StoreResponse {
|
||||||
|
/// Array of retrieved historical messages in [`WakuMessage`] format
|
||||||
|
messages: Vec<WakuMessage>,
|
||||||
|
/// Paging information in [`PagingOptions`] format from which to resume further historical queries
|
||||||
|
paging_options: Option<PagingOptions>,
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Paging information
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct PagingOptions {
|
||||||
|
/// Number of messages to retrieve per page
|
||||||
|
page_size: usize,
|
||||||
|
/// Message Index from which to perform pagination.
|
||||||
|
/// If not included and forward is set to `true`, paging will be performed from the beginning of the list.
|
||||||
|
/// If not included and forward is set to `false`, paging will be performed from the end of the list
|
||||||
|
cursor: Option<MessageIndex>,
|
||||||
|
/// `true` if paging forward, `false` if paging backward
|
||||||
|
forward: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Serialize, Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
pub struct MessageIndex {
|
||||||
|
/// Hash of the message at this [`MessageIndex`]
|
||||||
|
digest: String,
|
||||||
|
/// UNIX timestamp in nanoseconds at which the message at this [`MessageIndex`] was received
|
||||||
|
receiver_time: usize,
|
||||||
|
/// UNIX timestamp in nanoseconds at which the message is generated by its sender
|
||||||
|
sender_time: usize,
|
||||||
|
/// The pubsub topic of the message at this [`MessageIndex`]
|
||||||
|
pubsub_topic: String,
|
||||||
|
}
|
|
@ -1,4 +1,4 @@
|
||||||
use waku_sys;
|
mod general;
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
|
|
Loading…
Reference in New Issue