Work on request filter deserialization
This commit is contained in:
+4
-2
@@ -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(_)) => {
|
||||
|
||||
@@ -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 {}
|
||||
|
||||
Reference in New Issue
Block a user