Work on request filter deserialization

This commit is contained in:
Greg Heartsfield
2021-11-23 14:15:47 -06:00
parent ba19c978a5
commit bd7d083107
4 changed files with 57 additions and 2 deletions
+4 -2
View File
@@ -2,6 +2,7 @@ use std::{env, io::Error};
use futures_util::{SinkExt, StreamExt};
use log::{debug, info, warn};
use nostr_rs_relay::proto::Proto;
use tokio::net::{TcpListener, TcpStream};
use tokio::runtime::Builder;
use tokio_tungstenite::WebSocketStream;
@@ -67,9 +68,9 @@ async fn nostr_server(stream: TcpStream) {
// Handles valid clients who have upgraded to WebSockets
async fn process_client(stream: WebSocketStream<TcpStream>) {
// get a protocol helper;
let proto = Proto::new();
let (mut write, mut read) = stream.split();
// TODO: error on binary messages
// TODO: error on text messages > MAX_EVENT_SIZE
// TODO: select on a timeout to kill non-responsive clients
while let Some(mes_res) = read.next().await {
@@ -86,6 +87,7 @@ async fn process_client(stream: WebSocketStream<TcpStream>) {
)))
.await
.expect("send failed");
proto.process_message(cmd);
// Handle this request. Everything else below is basically error handling.
}
Ok(Message::Binary(_)) => {
+42
View File
@@ -1 +1,43 @@
use crate::error::{Error, Result};
use serde::{Deserialize, Deserializer, Serialize};
//use serde_json::json;
//use serde_json::Result;
// Container for a request filter
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
pub struct ReqCmd {
#[serde(deserialize_with = "u32_from_string")]
id: u32,
#[serde(deserialize_with = "u32_from_string")]
pubkey: u32,
created_at: u64,
kind: u8,
#[serde(deserialize_with = "tag_from_string")]
tags: Vec<Vec<String>>,
content: String,
#[serde(deserialize_with = "u64_from_string")]
sig: u64,
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
pub struct Subscription {
id: String,
Vec<ReqFilter>
}
#[derive(Serialize, Deserialize, PartialEq, Debug, Clone)]
pub struct ReqFilter {
id: Option<String>,
author: Option<String>,
kind: Option<u8>,
#[serde(rename = "e#")]
event: Option<String>,
#[serde(rename = "p#")]
pubkey: Option<String>,
since: Option<u64>,
authors: Option<Vec<String>>,
}
pub struct Request {}