test(examples): track various experiments
This commit is contained in:
parent
76baed51e2
commit
932d07b893
|
@ -1,7 +1,3 @@
|
||||||
/target
|
/target
|
||||||
/examples
|
|
||||||
|
|
||||||
/.idea
|
/.idea
|
||||||
relays
|
|
||||||
keys
|
|
||||||
*.html
|
*.html
|
|
@ -0,0 +1,22 @@
|
||||||
|
use std::collections::HashMap;
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
let mut map: HashMap<usize, String> = HashMap::new();
|
||||||
|
let add_string = |map: &mut HashMap<usize, String>, string: String| {
|
||||||
|
map.insert(string.len(), string);
|
||||||
|
};
|
||||||
|
add_string(&mut map, "hi".to_string());
|
||||||
|
add_string(&mut map, "ho".to_string());
|
||||||
|
map.add_string("hi".to_string());
|
||||||
|
map.add_string("ho".to_string());
|
||||||
|
map.get(&1);
|
||||||
|
}
|
||||||
|
|
||||||
|
trait InsertString {
|
||||||
|
fn add_string(&mut self, event: String);
|
||||||
|
}
|
||||||
|
impl InsertString for HashMap<usize, String> {
|
||||||
|
fn add_string(&mut self, event: String) {
|
||||||
|
self.insert(event.len(), event);
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,24 @@
|
||||||
|
use std::time::Duration;
|
||||||
|
use nostr_sdk::prelude::*;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
//tracing_subscriber::fmt::init();
|
||||||
|
let client = Client::new(Keys::generate());
|
||||||
|
let result = client.subscribe(vec![Filter::new()], None).await;
|
||||||
|
println!("subscribe: {:?}", result);
|
||||||
|
let result = client.add_relay("ws://localhost:4736").await;
|
||||||
|
println!("add relay: {:?}", result);
|
||||||
|
client.connect().await;
|
||||||
|
|
||||||
|
let mut notifications = client.notifications();
|
||||||
|
let _thread = tokio::spawn(async move {
|
||||||
|
client.send_event_builder(EventBuilder::new(Kind::TextNote, "test")).await;
|
||||||
|
tokio::time::sleep(Duration::from_secs(20)).await;
|
||||||
|
});
|
||||||
|
while let Ok(notification) = notifications.recv().await {
|
||||||
|
if let RelayPoolNotification::Event { event, .. } = notification {
|
||||||
|
println!("At {} found {} kind {} content \"{}\"", event.created_at, event.id, event.kind, event.content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,44 @@
|
||||||
|
use nostr_sdk::prelude::*;
|
||||||
|
|
||||||
|
#[tokio::main]
|
||||||
|
async fn main() {
|
||||||
|
//tracing_subscriber::fmt::init();
|
||||||
|
let client = Client::new(Keys::generate());
|
||||||
|
//let result = client.subscribe(vec![Filter::new()], None).await;
|
||||||
|
//println!("{:?}", result);
|
||||||
|
let mut notifications = client.notifications();
|
||||||
|
|
||||||
|
let result = client.add_relay("ws://localhost:3333").await;
|
||||||
|
println!("{:?}", result);
|
||||||
|
let result = client.connect_relay("ws://localhost:3333").await;
|
||||||
|
println!("{:?}", result);
|
||||||
|
|
||||||
|
//let _thread = tokio::spawn(async move {
|
||||||
|
// let result = client.add_relay("ws://localhost:4736").await;
|
||||||
|
// println!("{:?}", result);
|
||||||
|
// let result = client.connect_relay("ws://localhost:4736").await;
|
||||||
|
// println!("{:?}", result);
|
||||||
|
|
||||||
|
// // Block b
|
||||||
|
// //let result = client.add_relay("ws://localhost:54736").await;
|
||||||
|
// //println!("{:?}", result);
|
||||||
|
// //let result = client.connect_relay("ws://localhost:54736").await;
|
||||||
|
// //println!("{:?}", result);
|
||||||
|
|
||||||
|
// tokio::time::sleep(Duration::from_secs(20)).await;
|
||||||
|
//});
|
||||||
|
|
||||||
|
loop {
|
||||||
|
match notifications.recv().await {
|
||||||
|
Ok(notification) => {
|
||||||
|
if let RelayPoolNotification::Event { event, .. } = notification {
|
||||||
|
println!("At {} found {} kind {} content \"{}\"", event.created_at, event.id, event.kind, event.content);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Err(e) => {
|
||||||
|
println!("Aborting due to {:?}", e);
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,50 @@
|
||||||
|
use rustyline::error::ReadlineError;
|
||||||
|
use rustyline::{Cmd, ConditionalEventHandler, DefaultEditor, Event, EventContext, EventHandler, KeyEvent, Movement, RepeatCount, Result};
|
||||||
|
|
||||||
|
struct CtrlCHandler;
|
||||||
|
impl ConditionalEventHandler for CtrlCHandler {
|
||||||
|
fn handle(&self, evt: &Event, n: RepeatCount, positive: bool, ctx: &EventContext) -> Option<Cmd> {
|
||||||
|
Some(if !ctx.line().is_empty() {
|
||||||
|
Cmd::Kill(Movement::WholeLine)
|
||||||
|
} else {
|
||||||
|
Cmd::Interrupt
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() -> Result<()> {
|
||||||
|
// `()` can be used when no completer is required
|
||||||
|
let mut rl = DefaultEditor::new()?;
|
||||||
|
|
||||||
|
rl.bind_sequence(
|
||||||
|
KeyEvent::ctrl('c'),
|
||||||
|
EventHandler::Conditional(Box::from(CtrlCHandler)));
|
||||||
|
#[cfg(feature = "with-file-history")]
|
||||||
|
if rl.load_history("history.txt").is_err() {
|
||||||
|
println!("No previous history.");
|
||||||
|
}
|
||||||
|
loop {
|
||||||
|
let readline = rl.readline(">> ");
|
||||||
|
match readline {
|
||||||
|
Ok(line) => {
|
||||||
|
rl.add_history_entry(line.as_str());
|
||||||
|
println!("Line: {}", line);
|
||||||
|
},
|
||||||
|
Err(ReadlineError::Interrupted) => {
|
||||||
|
println!("CTRL-C");
|
||||||
|
break
|
||||||
|
},
|
||||||
|
Err(ReadlineError::Eof) => {
|
||||||
|
println!("CTRL-D");
|
||||||
|
break
|
||||||
|
},
|
||||||
|
Err(err) => {
|
||||||
|
println!("Error: {:?}", err);
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#[cfg(feature = "with-file-history")]
|
||||||
|
rl.save_history("history.txt");
|
||||||
|
Ok(())
|
||||||
|
}
|
Loading…
Reference in New Issue