Make connection generic on the network
Dependencies
- [2]
WGRFJRTEAdd tests, rename Status to Header, implement redirect and proper input handling - [3]
DBKKKHC2Initial commit - [4]
AMTMTTJTUpgrade status parsing - [5]
ONQEIR5BWIP mime-type handling - [6]
3SPNKI46Improve parsing. Add modules that were missed - [7]
AOJXTWBZRefactor read_until - [8]
HVFBGX2AImplement basic text/gemini
Change contents
- replacement in src/server.rs at line 1
use std::{net::TcpStream, sync::Arc};use std::{io::{Read, Write},net::TcpStream,sync::Arc,}; - replacement in src/server.rs at line 10
pub(crate) fn connect<V: Default + ServerCertVerifier + 'static>(pub trait Network {type Error;type Connection: Read + Write;fn connect(url: &Url) -> Result<Self::Connection, Self::Error>;}pub struct TcpNetwork<V>(V, !);impl<V: ServerCertVerifier + Default + 'static> Network for TcpNetwork<V> {type Error = !;type Connection = rustls::StreamOwned<ClientConnection, TcpStream>;fn connect(url: &Url) -> Result<Self::Connection, Self::Error> {Ok(connect::<V>(&url))}}fn connect<V: Default + ServerCertVerifier + 'static>( - replacement in src/server.rs at line 33
let cfg = tls_cfg::<V>();let cfg = tls_cfg(V::default()); - replacement in src/server.rs at line 56
fn tls_cfg<V: Default + ServerCertVerifier + 'static>() -> Arc<rustls::ClientConfig> {fn tls_cfg<V: ServerCertVerifier + 'static>(v: V) -> Arc<rustls::ClientConfig> { - replacement in src/server.rs at line 63
cfg.dangerous().set_certificate_verifier(Arc::new(V::default()));cfg.dangerous().set_certificate_verifier(Arc::new(v)); - edit in src/media.rs at line 2
use url::Url; - edit in src/media.rs at line 68
// TODO make a macro that matches on e.g. `"pre":x => {}` and desugars to// the kind of slice below - replacement in src/main.rs at line 1
#![feature(pattern)]#![feature(pattern, never_type, unwrap_infallible)] - replacement in src/main.rs at line 7[3.6915]→[3.20:50](∅→∅),[3.3712]→[3.20:50](∅→∅),[3.50]→[3.3756:3767](∅→∅),[3.3756]→[3.3756:3767](∅→∅),[3.3767]→[2.4985:5039](∅→∅),[3.80]→[3.3807:3827](∅→∅),[3.105]→[3.3807:3827](∅→∅),[2.5039]→[3.3807:3827](∅→∅),[3.3807]→[3.3807:3827](∅→∅),[3.3842]→[3.3842:3845](∅→∅)
use rustls::ClientConnection;use std::{io::{BufReader, Read, Result as ioResult, Write},net::TcpStream,};use server::{Network, TcpNetwork};use std::io::{BufReader, Read, Result as ioResult, Write}; - edit in src/main.rs at line 24
type Stream = rustls::StreamOwned<ClientConnection, TcpStream>; - replacement in src/main.rs at line 33
while let Some(new_url) = run_url(url) {while let Some(new_url) = run_url::<TcpNetwork<danger::Naive>>(url) { - replacement in src/main.rs at line 38
fn run_url(url: Url) -> Option<Url> {fn run_url<N: Network>(url: Url) -> Option<Url>where<N as Network>::Error: std::fmt::Debug,{ - replacement in src/main.rs at line 43
let mut stream = server::connect::<danger::Naive>(&url);let mut stream = N::connect(&url).expect("Failed to connect"); - replacement in src/main.rs at line 126
fn read_response_header(stream: &mut Stream) -> ioResult<response::Header> {fn read_response_header(mut stream: impl Read) -> ioResult<response::Header> { - replacement in src/main.rs at line 139
BufReader::new(&mut *stream).read_until(b"\r\n", &mut meta)?;BufReader::new(stream).read_until(b"\r\n", &mut meta)?; - replacement in src/io.rs at line 1
use std::io::{BufRead, Read, Result};use std::io::{Read, Result};