Add parser tests and fix some bugs

[?]
Jan 14, 2021, 10:04 PM
M5HGUS2TL72TRSUS7NN7ZQND4CDPVBERJQNUQJ4XTZ6GRUEPUIEAC

Dependencies

  • [2] 7DH43OFG Add gemtext helpers for headers and responses
  • [3] XHDJKZOS Fix test
  • [4] LSYI2TXC Housekeeping, add RequestType
  • [5] Y55SCAUN Finish gemtext parsing implementation
  • [6] JBZGFYVO Add nom parsers for main types
  • [7] 55JQX7NF Add sputnik
  • [8] KP6SZZ34 Fix building without parsers
  • [9] K37J3USB Add WIP gemtext parsers
  • [10] 5II6T7YE Add gemini library
  • [*] BOFUYB6I Add documentation and implement some feedback from Discord (https://discord.com/channels/273534239310479360/354038657075904544/796256815024701480)
  • [*] J4PKMKJX Add root doc comment, gemtext module

Change contents

  • edit in gemini/src/status.rs at line 248
    [5.388]
    [5.388]
    #[cfg(test)]
    mod test {
    use super::*;
    #[test]
    fn test_good_statuses() {
    let statuses = vec![
    b"10", b"11", b"20", b"30", b"31", b"40", b"41", b"42", b"43", b"44", b"50", b"51",
    b"52", b"53", b"59", b"60", b"61", b"62",
    ];
    for code in statuses {
    assert!(status(code).is_ok())
    }
    }
    #[test]
    fn test_bad_statuses() {
    let base_code = b"70";
    for i in 0..40 {
    let mut code = base_code.clone();
    code[1] += i;
    assert!(status(&code).is_err())
    }
    }
    }
  • edit in gemini/src/response.rs at line 118
    [12.12497]
    [5.6262]
    #[cfg(test)]
    mod test {
    use super::*;
    #[test]
    fn test_response() {
    let bytes = b"20 text/gemini\r\n=> gemini://foo.bar.baz/ wow";
    let res = response(bytes).unwrap().1;
    assert_eq!(res.body_text().unwrap(), "=> gemini://foo.bar.baz/ wow")
    }
    #[test]
    fn test_response_no_body() {
    let bytes = b"60 owwwwwwww!\r\ni shouldn't be here";
    assert!(response(bytes).is_err());
    let bytes = b"61 this is fine\r\n";
    assert!(response(bytes).is_ok());
    }
    }
  • edit in gemini/src/request.rs at line 166
    [5.7920]
    [5.7920]
    #[cfg(test)]
    mod test {
    use super::*;
    #[test]
    fn test_gemini_request() {
    let bytes = b"gemini://foo.bar.baz:1966/path\r\n";
    assert!(request(bytes).unwrap().1.is_gemini_request())
    }
    #[test]
    fn test_gemini_request_no_port() {
    let bytes = b"gemini://foo.bar.baz/path\r\n";
    assert!(request(bytes).unwrap().1.is_gemini_request())
    }
    #[test]
    fn test_generic_request() {
    let bytes = b"http://goggle.com/snoop\r\n";
    assert!(request(bytes).is_ok())
    }
    // NB: looking at this test, im unsure if this behavior is desirable.
    // maybe there should be a canonical parser that strictly requires
    // a scheme, since that's what the gemini spec does, along with a uri
    // parser that tries to read a "link-like-thing" as a gemini link?
    #[test]
    fn test_no_scheme() {
    let bytes = b"foo.bar.baz/path\r\n";
    assert!(request(bytes).unwrap().1.is_gemini_request())
    }
    }
  • replacement in gemini/src/header.rs at line 100
    [2.869][2.869:971]()
    pub fn success(mime_type: String) -> Option<Self> {
    Self::new(Status::SUCCESS, mime_type)
    [2.869]
    [2.971]
    pub fn success(mime_type: impl Into<String>) -> Option<Self> {
    Self::new(Status::SUCCESS, mime_type.into())
  • edit in gemini/src/header.rs at line 141
    [5.4247]
    [5.4247]
    #[cfg(test)]
    mod test {
    use super::*;
    #[test]
    fn test_success() {
    let bytes = b"20 text/gemini; charset=utf-8\r\n";
    assert_eq!(header(bytes).unwrap().1, Header::gemtext())
    }
    #[test]
    fn test_mimetype() {
    let bytes = b"20 text/json\r\n";
    assert_eq!(
    header(bytes).unwrap().1,
    Header::success("text/json").unwrap()
    )
    }
    #[test]
    fn test_error() {
    let bytes = b"59 grr! bark! meow!\r\n";
    assert_eq!(
    header(bytes).unwrap().1,
    Header::new(Status::BAD_REQUEST, "grr! bark! meow!".into()).unwrap()
    )
    }
    }
  • replacement in gemini/src/gemtext.rs at line 204
    [5.855][5.235:304](),[5.235][5.235:304]()
    character::complete::{line_ending, not_line_ending, space1},
    [5.855]
    [5.856]
    character::complete::{line_ending, not_line_ending, space0, space1},
  • replacement in gemini/src/gemtext.rs at line 208
    [5.941][5.351:399](),[5.351][5.351:399]()
    sequence::{pair, preceded, terminated},
    [5.941]
    [5.399]
    sequence::{pair, preceded, terminated, tuple},
  • edit in gemini/src/gemtext.rs at line 232
    [5.1311][5.850:936](),[5.850][5.850:936]()
    let body = pair(is_not(" \t\r\n"), opt(preceded(space1, is_not(" \t\r\n"))));
  • replacement in gemini/src/gemtext.rs at line 235
    [5.1379][5.1379:1461]()
    preceded(pair(tag("=>"), space1), terminated(body, line_ending)),
    [5.1379]
    [5.1461]
    preceded(
    pair(tag("=>"), space1),
    terminated(
    pair(is_not(" \t\r\n"), opt(preceded(space1, not_line_ending))),
    line_ending,
    ),
    ),
  • replacement in gemini/src/gemtext.rs at line 262
    [5.1937][5.1937:2008]()
    terminated(pair(level, not_line_ending), line_ending),
    [5.1937]
    [5.2008]
    terminated(
    pair(terminated(level, space0), not_line_ending),
    line_ending,
    ),
  • replacement in gemini/src/gemtext.rs at line 275
    [5.2210][5.2210:2288]()
    terminated(preceded(tag("*"), not_line_ending), line_ending),
    [5.2210]
    [5.2288]
    terminated(preceded(tag("* "), not_line_ending), line_ending),
  • replacement in gemini/src/gemtext.rs at line 285
    [5.2495][5.2495:2573]()
    terminated(preceded(tag(">"), not_line_ending), line_ending),
    [5.2495]
    [5.2573]
    terminated(
    preceded(terminated(tag(">"), space0), not_line_ending),
    line_ending,
    ),
  • replacement in gemini/src/gemtext.rs at line 303
    [5.3007][5.3007:3058]()
    pair(line_ending, tag("```")),
    [5.3007]
    [5.3058]
    tuple((line_ending, tag("```"), not_line_ending, line_ending)),
  • replacement in gemini/src/gemtext.rs at line 318
    [5.3413][5.3413:3496]()
    many1(alt((text, link, heading, list_item, quote, preformatted))),
    [5.3413]
    [5.3496]
    many1(alt((link, heading, list_item, quote, preformatted, text))),
  • edit in gemini/src/gemtext.rs at line 322
    [5.3564]
    [5.2094]
    }
    #[cfg(test)]
    mod test {
    use super::*;
    #[test]
    fn test_document() {
    assert_eq!(
    document(DOCUMENT).unwrap().1,
    Builder::from_docs(vec![
    Doc::Blank,
    Doc::Preformatted {
    alt: Some("logo".to_string()),
    text: " wooo\n/^^^^\\\n| |\n\\____/".to_string()
    },
    Doc::Blank,
    Doc::Heading(Level::One, "GAZE INTO THE SPHERE!".to_string()),
    Doc::Blank,
    Doc::Text("critics are raving".to_string()),
    Doc::Quote("i love the sphere - bort".to_string()),
    Doc::Quote("the sphere gives me purpose - frelvin".to_string()),
    Doc::Blank,
    Doc::ListItem("always".to_string()),
    Doc::ListItem("trust".to_string()),
    Doc::ListItem("the sphere".to_string()),
    Doc::Link {
    to: "gemini://sphere.gaze".to_string(),
    name: Some("gaze more here".to_string())
    }
    ])
    )
    }
  • replacement in gemini/src/gemtext.rs at line 362
    [5.191][5.191:219]()
    pub fn test_builder() {
    [5.191]
    [5.219]
    fn test_builder() {
  • replacement in gemini/src/gemtext.rs at line 375
    [5.698][5.698:743](),[5.743][3.96:112]()
    assert_eq!(
    doc.build(),
    r#"
    [5.698]
    [3.112]
    assert_eq!(doc.build(), DOCUMENT)
    }
    }
    #[cfg(test)]
    const DOCUMENT: &'static str = r#"
  • replacement in gemini/src/gemtext.rs at line 398
    [5.979][5.979:1000]()
    "#
    )
    }
    }
    [5.979]
    "#;
  • replacement in Cargo.toml at line 6
    [4.3668][4.3668:3683]()
    "./voskhod",
    [4.3668]
    [4.3683]
    # "./voskhod",
  • edit in Cargo.lock at line 3
    [5.10350][5.10350:10362](),[5.10586][5.10586:10602](),[5.10602][4.3686:3705](),[4.3705][5.10621:10686](),[5.10621][5.10621:10686](),[5.10686][4.3706:3784](),[4.3784][5.4408:4409](),[5.10764][5.4408:4409]()
    [[package]]
    name = "anyhow"
    version = "1.0.38"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "afddf7f520a80dbf76e6f50a35bca42a2331ef227a28b3b6dc5c2e2338d114b1"
  • edit in Cargo.lock at line 8
    [5.4600][5.10764:10777](),[5.10764][5.10764:10777](),[5.10777][4.3785:3820](),[4.3820][5.10810:10875](),[5.10810][5.10810:10875](),[5.10875][4.3821:3899]()
    [[package]]
    name = "autocfg"
    version = "1.0.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
  • edit in Cargo.lock at line 28
    [5.4848][4.3900:4089](),[5.4848][5.11626:11813](),[4.4089][5.11626:11813](),[5.11626][5.11626:11813]()
    name = "bytes"
    version = "1.0.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "b700ce4376041dcd0a327fd0097c41095743c4c8af8887265942faf1100bd040"
    [[package]]
    name = "cc"
    version = "1.0.66"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "4c0496836a84f8d0495758516b8621a622beb77c0fed418570e50764093ced48"
    [[package]]
  • edit in Cargo.lock at line 32
    [4.4204][5.12016:12045](),[5.12016][5.12016:12045](),[5.12045][4.4205:4223](),[4.4223][5.12064:12129](),[5.12064][5.12064:12129](),[5.12129][4.4224:4302](),[4.4302][5.12207:12220](),[5.12207][5.12207:12220](),[5.12220][4.4303:4346](),[4.4346][5.12258:12323](),[5.12258][5.12258:12323](),[5.12323][4.4347:4425](),[4.4425][5.12401:12418](),[5.12401][5.12401:12418](),[5.12418][4.4426:4450](),[4.4450][5.12427:12436](),[5.12427][5.12427:12436](),[5.12451][5.12451:12466](),[5.12466][4.4451:4498](),[4.4498][5.12499:12564](),[5.12499][5.12499:12564](),[5.12564][4.4499:4577]()
    [[package]]
    name = "cfg-if"
    version = "1.0.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
    [[package]]
    name = "core-foundation"
    version = "0.9.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "0a89e2ae426ea83155dccf10c0fa6b1463ef6d5fcb44cee0b224a408fa640a62"
    dependencies = [
    "core-foundation-sys",
    "libc",
    ]
    [[package]]
    name = "core-foundation-sys"
    version = "0.8.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "ea221b5284a47e40033bf9b66f35f984ec0ea2931eb03505246cd27a963f981b"
  • edit in Cargo.lock at line 34
    [5.12764][4.4578:4619](),[4.4619][5.12802:12867](),[5.12802][5.12802:12867](),[5.12867][4.4620:4698](),[4.4698][5.12945:12962](),[5.12945][5.12945:12962](),[5.12962][4.4699:4724](),[4.4724][5.13017:13019](),[5.13017][5.13017:13019](),[5.13019][4.4725:4929](),[4.4929][5.13019:13032](),[5.13019][5.13019:13032]()
    name = "foreign-types"
    version = "0.3.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
    dependencies = [
    "foreign-types-shared",
    ]
    [[package]]
    name = "foreign-types-shared"
    version = "0.1.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
    [[package]]
  • edit in Cargo.lock at line 60
    [5.13357][4.4954:4991](),[4.4991][5.13389:13454](),[5.13389][5.13389:13454](),[5.13454][4.4992:5124](),[4.5124][5.13532:13753](),[5.13532][5.13532:13753](),[5.13981][5.13981:13996]()
    name = "getrandom"
    version = "0.2.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "4060f4657be78b8e766215b02b18a2e862d83745545de804638e2b545e81aee6"
    dependencies = [
    "cfg-if 1.0.0",
    "libc",
    "wasi",
    ]
    [[package]]
    name = "hermit-abi"
    version = "0.1.17"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8"
    dependencies = [
    "libc",
    ]
    [[package]]
  • edit in Cargo.lock at line 71
    [5.14258][4.5125:5160](),[4.5160][5.14297:14362](),[5.14297][5.14297:14362](),[5.14362][4.5161:5275](),[4.5275][5.14440:14453](),[5.14440][5.14440:14453](),[5.14453][4.5276:5315](),[4.5315][5.14489:14554](),[5.14489][5.14489:14554](),[5.14554][4.5316:5394](),[4.5394][5.5079:5092](),[5.14632][5.5079:5092]()
    name = "instant"
    version = "0.1.9"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "61124eeebbd69b8190558df225adf7e4caafce0d743919e5d6b19652314ec5ec"
    dependencies = [
    "cfg-if 1.0.0",
    ]
    [[package]]
    name = "lazy_static"
    version = "1.4.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
    [[package]]
  • replacement in Cargo.lock at line 78
    [5.5318][4.5395:5413]()
    "cfg-if 0.1.10",
    [5.5318]
    [5.5329]
    "cfg-if",
  • edit in Cargo.lock at line 81
    [5.5359][5.5359:5361](),[5.5361][5.14632:14834](),[5.14632][5.14632:14834](),[5.14834][4.5414:5450](),[4.5450][5.14872:14937](),[5.14872][5.14872:14937](),[5.14937][4.5451:5529](),[4.5529][5.15015:15032](),[5.15015][5.15015:15032](),[5.15032][4.5530:5545]()
    ]
    [[package]]
    name = "libc"
    version = "0.2.81"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "1482821306169ec4d07f6aca392a4681f66c75c9918aa49641a2595db64053cb"
    [[package]]
    name = "lock_api"
    version = "0.4.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "dd96ffd135b2fd7b973ac026d28085defbe8983df057ced3eb4f2130b0831312"
    dependencies = [
    "scopeguard",
  • edit in Cargo.lock at line 84
    [5.15542][5.15542:15734](),[5.15734][4.5546:5564](),[4.5564][5.15745:15760](),[5.15745][5.15745:15760]()
    name = "log"
    version = "0.4.11"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "4fabed175da42fed1fa0746b0ea71f412aa9d35e76e95e59b192c64b9dc2bf8b"
    dependencies = [
    "cfg-if 0.1.10",
    ]
    [[package]]
  • edit in Cargo.lock at line 94
    [5.16128][5.16128:16141](),[5.16141][4.5565:5596](),[4.5596][5.16172:16237](),[5.16172][5.16172:16237](),[5.16237][4.5597:6165](),[4.6165][5.16315:16332](),[5.16315][5.16315:16332](),[5.16332][4.6166:6321](),[4.6321][5.16361:16363](),[5.16361][5.16361:16363]()
    [[package]]
    name = "mio"
    version = "0.7.7"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "e50ae3f04d169fcc9bde0b547d1c205219b7157e07ded9c5aff03e0637cb3ed7"
    dependencies = [
    "libc",
    "log",
    "miow",
    "ntapi",
    "winapi",
    ]
    [[package]]
    name = "miow"
    version = "0.3.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "5a33c1b55807fbed163481b5ba66db4b2fa6cde694a5027be10fb724206c5897"
    dependencies = [
    "socket2",
    "winapi",
    ]
    [[package]]
    name = "native-tls"
    version = "0.2.7"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "b8d96b2e1c8da3957d58100b09f102c6d9cfdfced01b7ec5a8974044bb09dbd4"
    dependencies = [
    "lazy_static",
    "libc",
    "log",
    "openssl",
    "openssl-probe",
    "openssl-sys",
    "schannel",
    "security-framework",
    "security-framework-sys",
    "tempfile",
    ]
  • edit in Cargo.lock at line 105
    [5.5610][4.6322:6541](),[4.6541][5.5610:5625](),[5.5610][5.5610:5625](),[5.5625][5.16376:16599](),[5.16376][5.16376:16599](),[5.16599][5.5626:5639](),[5.5639][4.6542:6579](),[4.6579][5.5672:5737](),[5.5672][5.5672:5737](),[5.5737][4.6580:6658](),[5.5815][5.16599:16612](),[4.6658][5.16599:16612](),[5.16599][5.16599:16612](),[5.16612][4.6659:6983](),[4.6983][5.16640:16658](),[5.16640][5.16640:16658](),[5.16658][4.6984:7448](),[4.7448][5.16658:16723](),[5.16658][5.16658:16723](),[5.16723][4.7449:7896]()
    ]
    [[package]]
    name = "ntapi"
    version = "0.3.6"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
    dependencies = [
    "winapi",
    ]
    [[package]]
    name = "num_cpus"
    version = "1.13.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
    dependencies = [
    "hermit-abi",
    "libc",
    ]
    [[package]]
    name = "once_cell"
    version = "1.5.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "13bd41f508810a131401606d54ac32a467c97172d74ba7662562ebba5ad07fa0"
    [[package]]
    name = "openssl"
    version = "0.10.32"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "038d43985d1ddca7a9900630d8cd031b56e4794eecc2e9ea39dd17aa04399a70"
    dependencies = [
    "bitflags",
    "cfg-if 1.0.0",
    "foreign-types",
    "lazy_static",
    "libc",
    "openssl-sys",
    ]
    [[package]]
    name = "openssl-probe"
    version = "0.1.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "77af24da69f9d9341038eba93a073b1fdaaa1b788221b00a69bce9e762cb32de"
    [[package]]
    name = "openssl-sys"
    version = "0.9.60"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "921fc71883267538946025deffb622905ecad223c28efbfdef9bb59a0175f3e6"
    dependencies = [
    "autocfg",
    "cc",
    "libc",
    "pkg-config",
    "vcpkg",
    ]
    [[package]]
    name = "parking_lot"
    version = "0.11.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "6d7744ac029df22dca6284efe4e898991d28e3085c706c972bcd7da4a27a15eb"
    dependencies = [
    "instant",
    "lock_api",
    "parking_lot_core",
    ]
    [[package]]
    name = "parking_lot_core"
    version = "0.8.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "9ccb628cad4f84851442432c60ad8e1f607e29752d0bf072cbd0baf28aa34272"
    dependencies = [
    "cfg-if 1.0.0",
    "instant",
    "libc",
    "redox_syscall 0.1.57",
    "smallvec",
    "winapi",
  • edit in Cargo.lock at line 118
    [5.17001][5.17001:17014](),[5.17014][4.8088:8132](),[4.8132][5.17051:17116](),[5.17051][5.17051:17116](),[5.17116][4.8133:8211](),[4.8211][5.17194:17389](),[5.17194][5.17194:17389]()
    [[package]]
    name = "pin-project-lite"
    version = "0.2.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "439697af366c49a6d0a010c56a0d97685bc140ce0d377b13a2ea2aa42d64a827"
    [[package]]
    name = "pkg-config"
    version = "0.3.19"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "3831453b3449ceb48b6d9c7ad7c96d5ea673e9b470a1dc578c2ce6521230884c"
  • edit in Cargo.lock at line 120
    [4.8225][4.8225:8407](),[4.8407][5.17389:17402](),[5.17389][5.17389:17402]()
    name = "ppv-lite86"
    version = "0.2.10"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "ac74c624d6b2d21f425f752262f42188365d7b8ff1aff74c82e45136510a4857"
    [[package]]
  • edit in Cargo.lock at line 142
    [5.5993][5.5993:6006](),[5.6006][4.8408:8440](),[4.8440][5.18085:18150](),[5.18085][5.18085:18150](),[5.18150][4.8441:8832]()
    [[package]]
    name = "rand"
    version = "0.8.2"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "18519b42a40024d661e1714153e9ad0c3de27cd495760ceb09710920f1098b1e"
    dependencies = [
    "libc",
    "rand_chacha",
    "rand_core",
    "rand_hc",
    ]
    [[package]]
    name = "rand_chacha"
    version = "0.3.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "e12735cf05c9e10bf21534da50a147b924d555dc7a547c42e6bb2d5b6017ae0d"
    dependencies = [
    "ppv-lite86",
    "rand_core",
    ]
  • edit in Cargo.lock at line 144
    [4.8845][4.8845:9249](),[4.9249][5.18228:18245](),[5.18228][5.18228:18245](),[5.18245][4.9250:9264](),[4.9264][5.18307:18322](),[5.18307][5.18307:18322](),[5.18322][4.9265:9307](),[4.9307][5.18363:18428](),[5.18363][5.18363:18428](),[5.18428][4.9308:9386](),[4.9386][5.18506:18519](),[5.18506][5.18506:18519](),[5.18519][4.9387:9428](),[4.9428][5.18557:18622](),[5.18557][5.18557:18622](),[5.18622][4.9429:9767](),[4.9767][5.6007:6020](),[5.18700][5.6007:6020]()
    name = "rand_core"
    version = "0.6.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "c026d7df8b298d90ccbbc5190bd04d85e159eaf5576caeacf8741da93ccbd2e5"
    dependencies = [
    "getrandom",
    ]
    [[package]]
    name = "rand_hc"
    version = "0.3.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "3190ef7066a446f2e7f42e239d161e905420ccab01eb967c9eb27d21b2322a73"
    dependencies = [
    "rand_core",
    ]
    [[package]]
    name = "redox_syscall"
    version = "0.1.57"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "41cc0f7e4d5d4544e8861606a285bb08d3e70712ccc7d2b84d7c0ccfaf4b05ce"
    [[package]]
    name = "redox_syscall"
    version = "0.2.4"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "05ec8ca9416c5ea37062b502703cd7fcb207736bc294f6e0cf367ac6fc234570"
    dependencies = [
    "bitflags",
    ]
    [[package]]
    name = "remove_dir_all"
    version = "0.5.3"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "3acd125665422973a33ac9d3dd2df85edad0f4ae9b00dafb1a05e43a9f5ef8e7"
    dependencies = [
    "winapi",
    ]
    [[package]]
  • edit in Cargo.lock at line 148
    [5.6194][4.9768:10773](),[5.6194][5.18700:18713](),[4.10773][5.18700:18713](),[5.18700][5.18700:18713](),[5.18713][4.10774:11042](),[4.11042][5.18746:18811](),[5.18746][5.18746:18811](),[5.18811][4.11043:11121]()
    [[package]]
    name = "schannel"
    version = "0.1.19"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "8f05ba609c234e60bee0d547fe94a4c7e9da733d1c962cf6e59efa4cd9c8bc75"
    dependencies = [
    "lazy_static",
    "winapi",
    ]
    [[package]]
    name = "scopeguard"
    version = "1.1.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
    [[package]]
    name = "security-framework"
    version = "2.0.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "c1759c2e3c8580017a484a7ac56d3abc5a6c1feadf88db2f3633f12ae4268c69"
    dependencies = [
    "bitflags",
    "core-foundation",
    "core-foundation-sys",
    "libc",
    "security-framework-sys",
    ]
    [[package]]
    name = "security-framework-sys"
    version = "2.0.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "f99b9d5e26d2a71633cc4f2ebae7cc9f874044e0c351a27e17892d76dce5678b"
    dependencies = [
    "core-foundation-sys",
    "libc",
    ]
    [[package]]
    name = "signal-hook-registry"
    version = "1.3.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "16f1d0fef1604ba8f7a073c7e701f213e056707210e9020af4528e0101ce11a6"
    dependencies = [
    "libc",
    ]
    [[package]]
    name = "smallvec"
    version = "1.6.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "fe0f37c9e8f3c5a4a66ad655a93c74daac4ad00c441533bf5c6e7990bb42604e"
  • edit in Cargo.lock at line 150
    [5.18902][4.11122:11301](),[4.11301][5.18937:18954](),[5.18937][5.18937:18954](),[5.18954][4.11302:11339](),[4.11339][5.18998:19013](),[5.18998][5.18998:19013]()
    name = "socket2"
    version = "0.3.19"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "122e570113d28d773067fab24266b66753f6ea915758651696b6e35e49f88d6e"
    dependencies = [
    "cfg-if 1.0.0",
    "libc",
    "winapi",
    ]
    [[package]]
  • edit in Cargo.lock at line 171
    [5.6584][5.19190:19203](),[5.19190][5.19190:19203](),[5.19203][4.11513:11549](),[4.11549][5.19240:19305](),[5.19240][5.19240:19305](),[5.19305][4.11550:11628](),[4.11628][5.19383:19400](),[5.19383][5.19383:19400](),[5.19400][4.11629:11718](),[4.11718][5.19416:19418](),[5.19416][5.19416:19418]()
    [[package]]
    name = "tempfile"
    version = "3.2.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "dac1c663cfc93810f88aed9b8941d48cabf856a1b111c29a40439018d870eb22"
    dependencies = [
    "cfg-if 1.0.0",
    "libc",
    "rand",
    "redox_syscall 0.2.4",
    "remove_dir_all",
    "winapi",
    ]
  • edit in Cargo.lock at line 208
    [4.12028][4.12028:12883](),[4.12883][5.20306:20319](),[5.20306][5.20306:20319]()
    name = "tokio"
    version = "1.0.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "d258221f566b6c803c7b4714abadc080172b272090cdc5e244a6d4dd13c3a6bd"
    dependencies = [
    "autocfg",
    "bytes",
    "libc",
    "memchr",
    "mio",
    "num_cpus",
    "once_cell",
    "parking_lot",
    "pin-project-lite",
    "signal-hook-registry",
    "tokio-macros",
    "winapi",
    ]
    [[package]]
    name = "tokio-macros"
    version = "1.0.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "42517d2975ca3114b22a16192634e8241dc5cc1f130be194645970cc1c371494"
    dependencies = [
    "proc-macro2",
    "quote",
    "syn",
    ]
    [[package]]
    name = "tokio-native-tls"
    version = "0.3.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "f7d995660bd2b7f8c1568414c1126076c13fbb725c40112dc0120b78eb9b717b"
    dependencies = [
    "native-tls",
    "tokio",
    ]
    [[package]]
  • edit in Cargo.lock at line 242
    [5.21430][5.21430:21443](),[5.21443][4.12884:12918](),[4.12918][5.21478:21543](),[5.21478][5.21478:21543](),[5.21543][4.12919:12997]()
    [[package]]
    name = "vcpkg"
    version = "0.2.11"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "b00bca6106a5e23f3eee943593759b7fcddb00554332e856d990c893966879fb"
  • edit in Cargo.lock at line 250
    [5.21831][4.12998:13033](),[4.13033][5.22007:22024](),[5.22007][5.22007:22024](),[5.22024][4.13034:13087](),[4.13087][5.22033:22035](),[5.22033][5.22033:22035](),[5.22035][4.13088:13300](),[4.13300][5.22035:22531](),[5.22035][5.22035:22531](),[5.22756][5.22756:22955](),[5.22955][5.6585:6598]()
    name = "voskhod"
    version = "0.1.0"
    dependencies = [
    "anyhow",
    "gemini",
    "tokio",
    "tokio-native-tls",
    ]
    [[package]]
    name = "wasi"
    version = "0.10.1+wasi-snapshot-preview1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "93c6c3420963c5c64bca373b25e77acb562081b9bb4dd5bb864187742186cea9"
    [[package]]
    name = "winapi"
    version = "0.3.9"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
    dependencies = [
    "winapi-i686-pc-windows-gnu",
    "winapi-x86_64-pc-windows-gnu",
    ]
    [[package]]
    name = "winapi-i686-pc-windows-gnu"
    version = "0.4.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
    [[package]]
    name = "winapi-x86_64-pc-windows-gnu"
    version = "0.4.0"
    source = "registry+https://github.com/rust-lang/crates.io-index"
    checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
    [[package]]