Make connection generic on the network

CandyCorvid
Jul 13, 2023, 10:35 AM
ARXVO5XAQFZR3X6MXW525Z6WXUYUHRJUGTTNCEKKXRAKQQBG5ZXAC

Dependencies

  • [2] WGRFJRTE Add tests, rename Status to Header, implement redirect and proper input handling
  • [3] DBKKKHC2 Initial commit
  • [4] AMTMTTJT Upgrade status parsing
  • [5] ONQEIR5B WIP mime-type handling
  • [6] 3SPNKI46 Improve parsing. Add modules that were missed
  • [7] AOJXTWBZ Refactor read_until
  • [8] HVFBGX2A Implement basic text/gemini

Change contents

  • replacement in src/server.rs at line 1
    [3.34][3.35:73]()
    use std::{net::TcpStream, sync::Arc};
    [3.34]
    [3.73]
    use std::{
    io::{Read, Write},
    net::TcpStream,
    sync::Arc,
    };
  • replacement in src/server.rs at line 10
    [3.161][3.161:227]()
    pub(crate) fn connect<V: Default + ServerCertVerifier + 'static>(
    [3.161]
    [3.227]
    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
    [3.382][3.382:416]()
    let cfg = tls_cfg::<V>();
    [3.382]
    [3.416]
    let cfg = tls_cfg(V::default());
  • replacement in src/server.rs at line 56
    [3.1114][3.1114:1201]()
    fn tls_cfg<V: Default + ServerCertVerifier + 'static>() -> Arc<rustls::ClientConfig> {
    [3.1114]
    [3.1201]
    fn tls_cfg<V: ServerCertVerifier + 'static>(v: V) -> Arc<rustls::ClientConfig> {
  • replacement in src/server.rs at line 63
    [3.1442][3.1442:1529]()
    cfg.dangerous()
    .set_certificate_verifier(Arc::new(V::default()));
    [3.1442]
    [3.1529]
    cfg.dangerous().set_certificate_verifier(Arc::new(v));
  • edit in src/media.rs at line 2
    [2.492][2.492:506]()
    use url::Url;
  • edit in src/media.rs at line 68
    [2.2096]
    [2.2096]
    // 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
    [3.3665][3.0:21]()
    #![feature(pattern)]
    [3.3665]
    [3.0]
    #![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,
    };
    [3.6915]
    [3.3845]
    use server::{Network, TcpNetwork};
    use std::io::{BufReader, Read, Result as ioResult, Write};
  • edit in src/main.rs at line 24
    [3.3860][3.3860:3924]()
    type Stream = rustls::StreamOwned<ClientConnection, TcpStream>;
  • replacement in src/main.rs at line 33
    [2.5178][2.5178:5223]()
    while let Some(new_url) = run_url(url) {
    [2.5178]
    [2.5223]
    while let Some(new_url) = run_url::<TcpNetwork<danger::Naive>>(url) {
  • replacement in src/main.rs at line 38
    [3.4124][2.5253:5291]()
    fn run_url(url: Url) -> Option<Url> {
    [3.4124]
    [2.5291]
    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
    [2.5337][3.322:383](),[3.7019][3.322:383](),[3.4208][3.322:383]()
    let mut stream = server::connect::<danger::Naive>(&url);
    [2.5337]
    [3.4244]
    let mut stream = N::connect(&url).expect("Failed to connect");
  • replacement in src/main.rs at line 126
    [3.860][2.6085:6162]()
    fn read_response_header(stream: &mut Stream) -> ioResult<response::Header> {
    [3.860]
    [3.157]
    fn read_response_header(mut stream: impl Read) -> ioResult<response::Header> {
  • replacement in src/main.rs at line 139
    [3.4960][3.309:375]()
    BufReader::new(&mut *stream).read_until(b"\r\n", &mut meta)?;
    [3.4960]
    [3.717]
    BufReader::new(stream).read_until(b"\r\n", &mut meta)?;
  • replacement in src/io.rs at line 1
    [3.9554][3.376:414]()
    use std::io::{BufRead, Read, Result};
    [3.9554]
    [3.414]
    use std::io::{Read, Result};