refactor: clippy suggestions

This commit is contained in:
Greg Heartsfield 2021-12-11 21:56:52 -06:00
parent ca0f01c94b
commit e732f918f9
7 changed files with 37 additions and 42 deletions

View File

@ -22,9 +22,9 @@ impl From<CloseCmd> for Result<Close> {
fn from(cc: CloseCmd) -> Result<Close> { fn from(cc: CloseCmd) -> Result<Close> {
// ensure command is correct // ensure command is correct
if cc.cmd != "CLOSE" { if cc.cmd != "CLOSE" {
return Err(Error::CommandUnknownError); Err(Error::CommandUnknownError)
} else { } else {
return Ok(Close { id: cc.id }); Ok(Close { id: cc.id })
} }
} }
} }

View File

@ -20,6 +20,12 @@ pub struct ClientConn {
max_subs: usize, max_subs: usize,
} }
impl Default for ClientConn {
fn default() -> Self {
Self::new()
}
}
impl ClientConn { impl ClientConn {
/// Create a new, empty connection state. /// Create a new, empty connection state.
pub fn new() -> Self { pub fn new() -> Self {
@ -77,7 +83,7 @@ impl ClientConn {
"Registered new subscription, currently have {} active subs", "Registered new subscription, currently have {} active subs",
self.subscriptions.len() self.subscriptions.len()
); );
return Ok(()); Ok(())
} }
/// Remove the subscription for this connection. /// Remove the subscription for this connection.

View File

@ -130,7 +130,7 @@ pub fn write_event(conn: &mut Connection, e: &Event) -> Result<usize> {
let ev_id = tx.last_insert_rowid(); let ev_id = tx.last_insert_rowid();
// add all event tags into the event_ref table // add all event tags into the event_ref table
let etags = e.get_event_tags(); let etags = e.get_event_tags();
if etags.len() > 0 { if !etags.is_empty() {
for etag in etags.iter() { for etag in etags.iter() {
tx.execute( tx.execute(
"INSERT OR IGNORE INTO event_ref (event_id, referenced_event) VALUES (?1, ?2)", "INSERT OR IGNORE INTO event_ref (event_id, referenced_event) VALUES (?1, ?2)",
@ -140,7 +140,7 @@ pub fn write_event(conn: &mut Connection, e: &Event) -> Result<usize> {
} }
// add all event tags into the pubkey_ref table // add all event tags into the pubkey_ref table
let ptags = e.get_pubkey_tags(); let ptags = e.get_pubkey_tags();
if ptags.len() > 0 { if !ptags.is_empty() {
for ptag in ptags.iter() { for ptag in ptags.iter() {
tx.execute( tx.execute(
"INSERT OR IGNORE INTO event_ref (event_id, referenced_pubkey) VALUES (?1, ?2)", "INSERT OR IGNORE INTO event_ref (event_id, referenced_pubkey) VALUES (?1, ?2)",
@ -238,7 +238,7 @@ fn query_from_sub(sub: &Subscription) -> String {
filter_components.push(created_clause); filter_components.push(created_clause);
} }
// combine all clauses, and add to filter_clauses // combine all clauses, and add to filter_clauses
if filter_components.len() > 0 { if !filter_components.is_empty() {
let mut fc = "( ".to_owned(); let mut fc = "( ".to_owned();
fc.push_str(&filter_components.join(" AND ")); fc.push_str(&filter_components.join(" AND "));
fc.push_str(" )"); fc.push_str(" )");
@ -247,7 +247,7 @@ fn query_from_sub(sub: &Subscription) -> String {
} }
// combine all filters with OR clauses, if any exist // combine all filters with OR clauses, if any exist
if filter_clauses.len() > 0 { if !filter_clauses.is_empty() {
query.push_str(" WHERE "); query.push_str(" WHERE ");
query.push_str(&filter_clauses.join(" OR ")); query.push_str(&filter_clauses.join(" OR "));
} }

View File

@ -39,7 +39,7 @@ where
D: Deserializer<'de>, D: Deserializer<'de>,
{ {
let opt = Option::deserialize(deserializer)?; let opt = Option::deserialize(deserializer)?;
Ok(opt.unwrap_or_else(|| vec![])) Ok(opt.unwrap_or_else(Vec::new))
} }
/// Convert network event to parsed/validated event. /// Convert network event to parsed/validated event.
@ -47,11 +47,11 @@ impl From<EventCmd> for Result<Event> {
fn from(ec: EventCmd) -> Result<Event> { fn from(ec: EventCmd) -> Result<Event> {
// ensure command is correct // ensure command is correct
if ec.cmd != "EVENT" { if ec.cmd != "EVENT" {
return Err(CommandUnknownError); Err(CommandUnknownError)
} else if ec.event.is_valid() { } else if ec.event.is_valid() {
return Ok(ec.event); Ok(ec.event)
} else { } else {
return Err(EventInvalid); Err(EventInvalid)
} }
} }
} }
@ -76,7 +76,7 @@ impl Event {
} }
let c = c_opt.unwrap(); let c = c_opt.unwrap();
// * compute the sha256sum. // * compute the sha256sum.
let digest: sha256::Hash = sha256::Hash::hash(&c.as_bytes()); let digest: sha256::Hash = sha256::Hash::hash(c.as_bytes());
let hex_digest = format!("{:x}", digest); let hex_digest = format!("{:x}", digest);
// * ensure the id matches the computed sha256sum. // * ensure the id matches the computed sha256sum.
if self.id != hex_digest { if self.id != hex_digest {
@ -88,10 +88,7 @@ impl Event {
let message = secp256k1::Message::from(digest); let message = secp256k1::Message::from(digest);
let pubkey = schnorrsig::PublicKey::from_str(&self.pubkey).unwrap(); let pubkey = schnorrsig::PublicKey::from_str(&self.pubkey).unwrap();
let verify = secp.schnorrsig_verify(&sig, &message, &pubkey); let verify = secp.schnorrsig_verify(&sig, &message, &pubkey);
match verify { matches!(verify, Ok(()))
Ok(()) => true,
_ => false,
}
} }
/// Convert event to canonical representation for signing. /// Convert event to canonical representation for signing.
@ -99,7 +96,7 @@ impl Event {
// create a JsonValue for each event element // create a JsonValue for each event element
let mut c: Vec<Value> = vec![]; let mut c: Vec<Value> = vec![];
// id must be set to 0 // id must be set to 0
let id = Number::from(0 as u64); let id = Number::from(0_u64);
c.push(serde_json::Value::Number(id)); c.push(serde_json::Value::Number(id));
// public key // public key
c.push(Value::String(self.pubkey.to_owned())); c.push(Value::String(self.pubkey.to_owned()));
@ -135,12 +132,10 @@ impl Event {
pub fn get_event_tags(&self) -> Vec<&str> { pub fn get_event_tags(&self) -> Vec<&str> {
let mut etags = vec![]; let mut etags = vec![];
for t in self.tags.iter() { for t in self.tags.iter() {
if t.len() >= 2 { if t.len() >= 2 && t.get(0).unwrap() == "e" {
if t.get(0).unwrap() == "e" {
etags.push(&t.get(1).unwrap()[..]); etags.push(&t.get(1).unwrap()[..]);
} }
} }
}
etags etags
} }
@ -148,12 +143,10 @@ impl Event {
pub fn get_pubkey_tags(&self) -> Vec<&str> { pub fn get_pubkey_tags(&self) -> Vec<&str> {
let mut ptags = vec![]; let mut ptags = vec![];
for t in self.tags.iter() { for t in self.tags.iter() {
if t.len() >= 2 { if t.len() >= 2 && t.get(0).unwrap() == "p" {
if t.get(0).unwrap() == "p" {
ptags.push(&t.get(1).unwrap()[..]); ptags.push(&t.get(1).unwrap()[..]);
} }
} }
}
ptags ptags
} }

View File

@ -177,12 +177,9 @@ async fn nostr_server(
match parsed { match parsed {
Ok(c) => { Ok(c) => {
let stop_tx = running_queries.remove(&c.id); let stop_tx = running_queries.remove(&c.id);
match stop_tx { if let Some(tx) = stop_tx {
Some(tx) => {
info!("Removing query, telling DB to abandon query"); info!("Removing query, telling DB to abandon query");
tx.send(()).ok(); tx.send(()).ok();
},
None => {}
} }
conn.unsubscribe(c); conn.unsubscribe(c);
}, },

View File

@ -44,7 +44,7 @@ pub struct NostrStream {
/// Given a websocket, return a protocol stream wrapper. /// Given a websocket, return a protocol stream wrapper.
pub fn wrap_ws_in_nostr(ws: WebSocketStream<TcpStream>) -> NostrStream { pub fn wrap_ws_in_nostr(ws: WebSocketStream<TcpStream>) -> NostrStream {
return NostrStream { ws_stream: ws }; NostrStream { ws_stream: ws }
} }
/// Implement the [`Stream`] interface to produce Nostr messages. /// Implement the [`Stream`] interface to produce Nostr messages.

View File

@ -52,18 +52,18 @@ impl<'de> Deserialize<'de> for Subscription {
// check for array // check for array
let va = v let va = v
.as_array_mut() .as_array_mut()
.ok_or(serde::de::Error::custom("not array"))?; .ok_or_else(|| serde::de::Error::custom("not array"))?;
// check length // check length
if va.len() < 3 { if va.len() < 3 {
return Err(serde::de::Error::custom("not enough fields")); return Err(serde::de::Error::custom("not enough fields"));
} }
let mut i = va.into_iter(); let mut i = va.iter_mut();
// get command ("REQ") and ensure it is a string // get command ("REQ") and ensure it is a string
let req_cmd_str: serde_json::Value = i.next().unwrap().take(); let req_cmd_str: serde_json::Value = i.next().unwrap().take();
let req = req_cmd_str.as_str().ok_or(serde::de::Error::custom( let req = req_cmd_str
"first element of request was not a string", .as_str()
))?; .ok_or_else(|| serde::de::Error::custom("first element of request was not a string"))?;
if req != "REQ" { if req != "REQ" {
return Err(serde::de::Error::custom("missing REQ command")); return Err(serde::de::Error::custom("missing REQ command"));
} }
@ -72,7 +72,7 @@ impl<'de> Deserialize<'de> for Subscription {
let sub_id_str: serde_json::Value = i.next().unwrap().take(); let sub_id_str: serde_json::Value = i.next().unwrap().take();
let sub_id = sub_id_str let sub_id = sub_id_str
.as_str() .as_str()
.ok_or(serde::de::Error::custom("missing subscription id"))?; .ok_or_else(|| serde::de::Error::custom("missing subscription id"))?;
let mut filters = vec![]; let mut filters = vec![];
for fv in i { for fv in i {
@ -100,7 +100,7 @@ impl Subscription {
return true; return true;
} }
} }
return false; false
} }
} }
@ -135,9 +135,8 @@ impl ReqFilter {
self.id.as_ref().map(|v| v == &event.id).unwrap_or(true) self.id.as_ref().map(|v| v == &event.id).unwrap_or(true)
&& self.since.map(|t| event.created_at > t).unwrap_or(true) && self.since.map(|t| event.created_at > t).unwrap_or(true)
&& self.kind_match(event.kind) && self.kind_match(event.kind)
&& self.author_match(&event) && self.author_match(event)
&& self.event_match(&event) && self.event_match(event)
&& true // match if all other fields are absent
} }
} }