add gemini file serving

This commit is contained in:
Charlotte 🦝 Delenk 2024-11-30 07:41:43 +01:00
parent 46b1217b75
commit b5fc511789
Signed by: darkkirb
GPG key ID: AB2BD8DAF2E37122
6 changed files with 306 additions and 174 deletions

63
Cargo.lock generated
View file

@ -836,6 +836,7 @@ dependencies = [
"tokio",
"tokio-rustls 0.26.0",
"tracing",
"url",
]
[[package]]
@ -1968,9 +1969,9 @@ dependencies = [
[[package]]
name = "js-sys"
version = "0.3.72"
version = "0.3.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9"
checksum = "fb15147158e79fd8b8afd0252522769c4f48725460b37338544d8379d94fc8f9"
dependencies = [
"wasm-bindgen",
]
@ -1992,15 +1993,15 @@ checksum = "830d08ce1d1d941e6b30645f1a0eb5643013d835ce3779a5fc208261dbe10f55"
[[package]]
name = "libc"
version = "0.2.166"
version = "0.2.167"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36"
checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc"
[[package]]
name = "libloading"
version = "0.8.5"
version = "0.8.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4"
checksum = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34"
dependencies = [
"cfg-if",
"windows-targets 0.52.6",
@ -2159,11 +2160,10 @@ dependencies = [
[[package]]
name = "mio"
version = "1.0.2"
version = "1.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd"
dependencies = [
"hermit-abi",
"libc",
"wasi",
"windows-sys 0.52.0",
@ -3525,9 +3525,9 @@ checksum = "13c2bddecc57b384dee18652358fb23172facb8a2c51ccc10d74c157bdea3292"
[[package]]
name = "syn"
version = "2.0.89"
version = "2.0.90"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e"
checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31"
dependencies = [
"proc-macro2",
"quote",
@ -3892,9 +3892,9 @@ dependencies = [
[[package]]
name = "tracing-error"
version = "0.2.0"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e"
checksum = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db"
dependencies = [
"tracing",
"tracing-subscriber",
@ -3913,9 +3913,9 @@ dependencies = [
[[package]]
name = "tracing-serde"
version = "0.1.3"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1"
checksum = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1"
dependencies = [
"serde",
"tracing-core",
@ -3923,9 +3923,9 @@ dependencies = [
[[package]]
name = "tracing-subscriber"
version = "0.3.18"
version = "0.3.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b"
checksum = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008"
dependencies = [
"matchers",
"nu-ansi-term",
@ -4109,9 +4109,9 @@ checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
[[package]]
name = "wasm-bindgen"
version = "0.2.95"
version = "0.2.96"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
checksum = "21d3b25c3ea1126a2ad5f4f9068483c2af1e64168f847abe863a526b8dbfe00b"
dependencies = [
"cfg-if",
"once_cell",
@ -4120,9 +4120,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-backend"
version = "0.2.95"
version = "0.2.96"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
checksum = "52857d4c32e496dc6537646b5b117081e71fd2ff06de792e3577a150627db283"
dependencies = [
"bumpalo",
"log",
@ -4135,21 +4135,22 @@ dependencies = [
[[package]]
name = "wasm-bindgen-futures"
version = "0.4.45"
version = "0.4.46"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b"
checksum = "951fe82312ed48443ac78b66fa43eded9999f738f6022e67aead7b708659e49a"
dependencies = [
"cfg-if",
"js-sys",
"once_cell",
"wasm-bindgen",
"web-sys",
]
[[package]]
name = "wasm-bindgen-macro"
version = "0.2.95"
version = "0.2.96"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
checksum = "920b0ffe069571ebbfc9ddc0b36ba305ef65577c94b06262ed793716a1afd981"
dependencies = [
"quote",
"wasm-bindgen-macro-support",
@ -4157,9 +4158,9 @@ dependencies = [
[[package]]
name = "wasm-bindgen-macro-support"
version = "0.2.95"
version = "0.2.96"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
checksum = "bf59002391099644be3524e23b781fa43d2be0c5aa0719a18c0731b9d195cab6"
dependencies = [
"proc-macro2",
"quote",
@ -4170,15 +4171,15 @@ dependencies = [
[[package]]
name = "wasm-bindgen-shared"
version = "0.2.95"
version = "0.2.96"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
checksum = "e5047c5392700766601942795a436d7d2599af60dcc3cc1248c9120bfb0827b0"
[[package]]
name = "web-sys"
version = "0.3.72"
version = "0.3.73"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112"
checksum = "476364ff87d0ae6bfb661053a9104ab312542658c3d8f963b7ace80b6f9b26b9"
dependencies = [
"js-sys",
"wasm-bindgen",

298
Cargo.nix
View file

@ -31,7 +31,7 @@ args@{
ignoreLockHash,
}:
let
nixifiedLockHash = "492619d4eb6e1df303730a34aaca887bd75b386bfa9612d617feddfbff36499c";
nixifiedLockHash = "b74868cc2f3f13a8548b99e3b993b2252a39400f0f9048a93634a9bf4eb8fcc2";
workspaceSrc = if args.workspaceSrc == null then ./. else args.workspaceSrc;
currentLockHash = builtins.hashFile "sha256" (workspaceSrc + /Cargo.lock);
lockHashIgnored =
@ -233,7 +233,7 @@ else
};
dependencies = {
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
};
@ -283,7 +283,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -524,7 +524,7 @@ else
];
dependencies = {
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
paste =
@ -1977,7 +1977,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${
@ -2234,7 +2234,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
which =
@ -2425,7 +2425,7 @@ else
inherit profileName;
}).out;
${if hostPlatform.isUnix then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
shlex =
@ -2517,11 +2517,11 @@ else
inherit profileName;
}).out;
tracing_error =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-error."0.2.0" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-error."0.2.1" {
inherit profileName;
}).out;
tracing_subscriber =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.18" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.19" {
inherit profileName;
}).out;
};
@ -2669,6 +2669,10 @@ else
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing."0.1.41" {
inherit profileName;
}).out;
url =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".url."2.5.4" {
inherit profileName;
}).out;
};
});
@ -2841,7 +2845,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.73" {
inherit profileName;
}).out;
num_traits =
@ -2857,7 +2861,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" {
inherit profileName;
}).out;
${if hostPlatform.isWindows then "windows_targets" else null} =
@ -2895,11 +2899,11 @@ else
inherit profileName;
}).out;
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
libloading =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libloading."0.8.5" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libloading."0.8.6" {
inherit profileName;
}).out;
};
@ -2974,7 +2978,7 @@ else
inherit profileName;
}).out;
tracing_error =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-error."0.2.0" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-error."0.2.1" {
inherit profileName;
}).out;
url =
@ -3008,7 +3012,7 @@ else
inherit profileName;
}).out;
tracing_error =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-error."0.2.0" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-error."0.2.1" {
inherit profileName;
}).out;
};
@ -3079,7 +3083,7 @@ else
inherit profileName;
}).out;
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
};
@ -3123,7 +3127,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
};
@ -3543,7 +3547,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -3642,7 +3646,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -3786,7 +3790,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -3828,7 +3832,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.isWindows then "windows_sys" else null} =
@ -3982,7 +3986,7 @@ else
inherit profileName;
}).out;
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.parsed.kernel.name == "windows" then "winapi" else null} =
@ -4362,11 +4366,11 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.73" {
inherit profileName;
}).out;
${if hostPlatform.isUnix then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.parsed.kernel.name == "wasi" then "wasi" else null} =
@ -4383,7 +4387,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" {
inherit profileName;
}).out;
};
@ -4759,7 +4763,7 @@ else
inherit profileName;
}).out;
${if hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "redox" then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.parsed.kernel.name == "windows" then "windows" else null} =
@ -5323,7 +5327,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.73" {
inherit profileName;
}).out;
${
@ -5332,7 +5336,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" {
inherit profileName;
}).out;
${if hostPlatform.parsed.kernel.name == "windows" then "windows_core" else null} =
@ -5683,7 +5687,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -5844,25 +5848,29 @@ else
};
dependencies = {
${if hostPlatform.isUnix then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
};
});
"registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.72" =
"registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.73" =
overridableMkRustCrate
(profileName: rec {
name = "js-sys";
version = "0.3.72";
version = "0.3.73";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9";
sha256 = "fb15147158e79fd8b8afd0252522769c4f48725460b37338544d8379d94fc8f9";
};
features = builtins.concatLists [
[ "default" ]
[ "std" ]
];
dependencies = {
wasm_bindgen =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" {
inherit profileName;
}).out;
};
@ -5902,15 +5910,15 @@ else
};
});
"registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" =
"registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" =
overridableMkRustCrate
(profileName: rec {
name = "libc";
version = "0.2.166";
version = "0.2.167";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "c2ccc108bbc0b1331bd061864e7cd823c0cab660bbe6970e66e2c0614decde36";
sha256 = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc";
};
features = builtins.concatLists [
[ "default" ]
@ -5919,15 +5927,15 @@ else
];
});
"registry+https://github.com/rust-lang/crates.io-index".libloading."0.8.5" =
"registry+https://github.com/rust-lang/crates.io-index".libloading."0.8.6" =
overridableMkRustCrate
(profileName: rec {
name = "libloading";
version = "0.8.5";
version = "0.8.6";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "4979f22fdb869068da03c9f7528f8297c6fd2606bc3a4affe42e6a823fdb8da4";
sha256 = "fc2f4eb4bc735547cfed7c0a4922cbd04a4655978c09b54f1f7b228750664c34";
};
dependencies = {
${if hostPlatform.isUnix then "cfg_if" else null} =
@ -6359,15 +6367,15 @@ else
};
});
"registry+https://github.com/rust-lang/crates.io-index".mio."1.0.2" =
"registry+https://github.com/rust-lang/crates.io-index".mio."1.0.3" =
overridableMkRustCrate
(profileName: rec {
name = "mio";
version = "1.0.2";
version = "1.0.3";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec";
sha256 = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd";
};
features = builtins.concatLists [
[ "net" ]
@ -6375,12 +6383,17 @@ else
[ "os-poll" ]
];
dependencies = {
${if hostPlatform.parsed.kernel.name == "hermit" then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".hermit-abi."0.3.9" {
inherit profileName;
}).out;
${if hostPlatform.isUnix || hostPlatform.parsed.kernel.name == "wasi" then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
${
if
hostPlatform.isUnix
|| hostPlatform.parsed.kernel.name == "hermit"
|| hostPlatform.parsed.kernel.name == "wasi"
then
"libc"
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.parsed.kernel.name == "wasi" then "wasi" else null} =
@ -6609,7 +6622,7 @@ else
inherit profileName;
}).out;
${if !hostPlatform.isWindows then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
};
@ -6829,7 +6842,7 @@ else
inherit profileName;
}).out;
${if hostPlatform.isUnix then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.parsed.kernel.name == "redox" then "syscall" else null} =
@ -6936,7 +6949,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -7131,7 +7144,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -7180,7 +7193,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
once_cell =
@ -7212,7 +7225,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.73" {
inherit profileName;
}).out;
${if hostPlatform.parsed.kernel.name == "windows" then "winapi" else null} =
@ -7363,7 +7376,7 @@ else
];
dependencies = {
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.isWindows then "once_cell" else null} =
@ -7434,7 +7447,7 @@ else
];
dependencies = {
${if hostPlatform.isUnix then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
rand_chacha =
@ -7814,7 +7827,7 @@ else
inherit profileName;
}).out;
${if hostPlatform.parsed.cpu.name == "wasm32" then "js_sys" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.73" {
inherit profileName;
}).out;
${if !(hostPlatform.parsed.cpu.name == "wasm32") then "log" else null} =
@ -7886,15 +7899,15 @@ else
inherit profileName;
}).out;
${if hostPlatform.parsed.cpu.name == "wasm32" then "wasm_bindgen" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" {
inherit profileName;
}).out;
${if hostPlatform.parsed.cpu.name == "wasm32" then "wasm_bindgen_futures" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-futures."0.4.45"
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-futures."0.4.46"
{ inherit profileName; }
).out;
${if hostPlatform.parsed.cpu.name == "wasm32" then "web_sys" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.73" {
inherit profileName;
}).out;
${if !(hostPlatform.parsed.cpu.name == "wasm32") then "webpki_roots" else null} =
@ -7972,7 +7985,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${
@ -8239,7 +8252,7 @@ else
else
null
} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${
@ -8742,7 +8755,7 @@ else
inherit profileName;
}).out;
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
security_framework_sys =
@ -8775,7 +8788,7 @@ else
inherit profileName;
}).out;
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
};
@ -8921,7 +8934,7 @@ else
inherit profileName;
}).out;
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.isWindows then "os_info" else null} =
@ -9142,7 +9155,7 @@ else
inherit profileName;
}).out;
tracing_subscriber =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.18" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.19" {
inherit profileName;
}).out;
};
@ -9252,7 +9265,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -9490,7 +9503,7 @@ else
};
dependencies = {
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
};
@ -9626,7 +9639,7 @@ else
];
dependencies = {
${if hostPlatform.isUnix then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
${if hostPlatform.isWindows then "windows_sys" else null} =
@ -9976,7 +9989,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -10061,7 +10074,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
tempfile =
@ -10515,15 +10528,15 @@ else
];
});
"registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" =
"registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" =
overridableMkRustCrate
(profileName: rec {
name = "syn";
version = "2.0.89";
version = "2.0.90";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "44d46482f1c1c87acd84dea20c1bf5ebff4c757009ed6bf19cfd36fb10e92c4e";
sha256 = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31";
};
features = builtins.concatLists [
[ "clone-impls" ]
@ -10612,7 +10625,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -10712,7 +10725,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -10738,7 +10751,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -10954,11 +10967,11 @@ else
inherit profileName;
}).out;
${if hostPlatform.isUnix then "libc" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
mio =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".mio."1.0.2" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".mio."1.0.3" {
inherit profileName;
}).out;
pin_project_lite =
@ -11004,7 +11017,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -11505,7 +11518,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -11538,15 +11551,15 @@ else
};
});
"registry+https://github.com/rust-lang/crates.io-index".tracing-error."0.2.0" =
"registry+https://github.com/rust-lang/crates.io-index".tracing-error."0.2.1" =
overridableMkRustCrate
(profileName: rec {
name = "tracing-error";
version = "0.2.0";
version = "0.2.1";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "d686ec1c0f384b1277f097b2f279a2ecc11afe8c133c1aabf036a27cb4cd206e";
sha256 = "8b1581020d7a273442f5b45074a6a57d5757ad0a47dac0e9f0bd57b81936f3db";
};
features = builtins.concatLists [
[ "default" ]
@ -11558,7 +11571,7 @@ else
inherit profileName;
}).out;
tracing_subscriber =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.18" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.19" {
inherit profileName;
}).out;
};
@ -11594,15 +11607,15 @@ else
};
});
"registry+https://github.com/rust-lang/crates.io-index".tracing-serde."0.1.3" =
"registry+https://github.com/rust-lang/crates.io-index".tracing-serde."0.2.0" =
overridableMkRustCrate
(profileName: rec {
name = "tracing-serde";
version = "0.1.3";
version = "0.2.0";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "bc6b213177105856957181934e4920de57730fc69bf42c37ee5bb664d406d9e1";
sha256 = "704b1aeb7be0d0a84fc9828cae51dab5970fee5088f83d1dd7ee6f6246fc6ff1";
};
dependencies = {
serde =
@ -11616,15 +11629,15 @@ else
};
});
"registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.18" =
"registry+https://github.com/rust-lang/crates.io-index".tracing-subscriber."0.3.19" =
overridableMkRustCrate
(profileName: rec {
name = "tracing-subscriber";
version = "0.3.18";
version = "0.3.19";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "ad0f048c97dbd9faa9b7df56362b8ebcaa52adb06b498c050d2f4e32f90a7a8b";
sha256 = "e8189decb5ac0fa7bc8b96b7cb9b2701d60d48805aca84a238004d665fcc4008";
};
features = builtins.concatLists [
[ "alloc" ]
@ -11698,7 +11711,7 @@ else
inherit profileName;
}).out;
tracing_serde =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-serde."0.1.3" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".tracing-serde."0.2.0" {
inherit profileName;
}).out;
};
@ -11740,7 +11753,7 @@ else
};
dependencies = {
libc =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.166" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".libc."0.2.167" {
inherit profileName;
}).out;
};
@ -12092,15 +12105,15 @@ else
};
});
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" =
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" =
overridableMkRustCrate
(profileName: rec {
name = "wasm-bindgen";
version = "0.2.95";
version = "0.2.96";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e";
sha256 = "21d3b25c3ea1126a2ad5f4f9068483c2af1e64168f847abe863a526b8dbfe00b";
};
features = builtins.concatLists [
[ "default" ]
@ -12118,24 +12131,27 @@ else
}).out;
wasm_bindgen_macro =
(
buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro."0.2.95"
buildRustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro."0.2.96"
{ profileName = "__noProfile"; }
).out;
};
});
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-backend."0.2.95" =
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-backend."0.2.96" =
overridableMkRustCrate
(profileName: rec {
name = "wasm-bindgen-backend";
version = "0.2.95";
version = "0.2.96";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358";
sha256 = "52857d4c32e496dc6537646b5b117081e71fd2ff06de792e3577a150627db283";
};
features = builtins.concatLists [
[ "atomics" ]
[ "coverage" ]
[ "spans" ]
[ "std" ]
];
dependencies = {
bumpalo =
@ -12159,58 +12175,69 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
wasm_bindgen_shared =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.96" {
inherit profileName;
}).out;
};
});
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-futures."0.4.45" =
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-futures."0.4.46" =
overridableMkRustCrate
(profileName: rec {
name = "wasm-bindgen-futures";
version = "0.4.45";
version = "0.4.46";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "cc7ec4f8827a71586374db3e87abdb5a2bb3a15afed140221307c3ec06b1f63b";
sha256 = "951fe82312ed48443ac78b66fa43eded9999f738f6022e67aead7b708659e49a";
};
features = builtins.concatLists [
[ "default" ]
[ "std" ]
];
dependencies = {
cfg_if =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".cfg-if."1.0.0" {
inherit profileName;
}).out;
js_sys =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.73" {
inherit profileName;
}).out;
once_cell =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".once_cell."1.20.2" {
inherit profileName;
}).out;
wasm_bindgen =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" {
inherit profileName;
}).out;
${if builtins.elem "atomics" hostPlatformFeatures then "web_sys" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.73" {
inherit profileName;
}).out;
};
});
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro."0.2.95" =
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro."0.2.96" =
overridableMkRustCrate
(profileName: rec {
name = "wasm-bindgen-macro";
version = "0.2.95";
version = "0.2.96";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56";
sha256 = "920b0ffe069571ebbfc9ddc0b36ba305ef65577c94b06262ed793716a1afd981";
};
features = builtins.concatLists [
[ "atomics" ]
[ "coverage" ]
[ "spans" ]
[ "std" ]
];
dependencies = {
quote =
@ -12219,24 +12246,27 @@ else
}).out;
wasm_bindgen_macro_support =
(
rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro-support."0.2.95"
rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro-support."0.2.96"
{ inherit profileName; }
).out;
};
});
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro-support."0.2.95" =
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-macro-support."0.2.96" =
overridableMkRustCrate
(profileName: rec {
name = "wasm-bindgen-macro-support";
version = "0.2.95";
version = "0.2.96";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68";
sha256 = "bf59002391099644be3524e23b781fa43d2be0c5aa0719a18c0731b9d195cab6";
};
features = builtins.concatLists [
[ "atomics" ]
[ "coverage" ]
[ "spans" ]
[ "std" ]
];
dependencies = {
proc_macro2 =
@ -12248,41 +12278,41 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
wasm_bindgen_backend =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-backend."0.2.95"
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-backend."0.2.96"
{ inherit profileName; }
).out;
wasm_bindgen_shared =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.96" {
inherit profileName;
}).out;
};
});
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.95" =
"registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen-shared."0.2.96" =
overridableMkRustCrate
(profileName: rec {
name = "wasm-bindgen-shared";
version = "0.2.95";
version = "0.2.96";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d";
sha256 = "e5047c5392700766601942795a436d7d2599af60dcc3cc1248c9120bfb0827b0";
};
});
"registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.72" =
"registry+https://github.com/rust-lang/crates.io-index".web-sys."0.3.73" =
overridableMkRustCrate
(profileName: rec {
name = "web-sys";
version = "0.3.72";
version = "0.3.73";
registry = "registry+https://github.com/rust-lang/crates.io-index";
src = fetchCratesIo {
inherit name version;
sha256 = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112";
sha256 = "476364ff87d0ae6bfb661053a9104ab312542658c3d8f963b7ace80b6f9b26b9";
};
features = builtins.concatLists [
[ "AbortController" ]
@ -12306,14 +12336,16 @@ else
[ "Window" ]
[ "Worker" ]
[ "WorkerGlobalScope" ]
[ "default" ]
[ "std" ]
];
dependencies = {
js_sys =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.73" {
inherit profileName;
}).out;
wasm_bindgen =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" {
inherit profileName;
}).out;
};
@ -12331,11 +12363,11 @@ else
};
dependencies = {
${if false then "js_sys" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.72" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".js-sys."0.3.73" {
inherit profileName;
}).out;
${if false then "wasm_bindgen" else null} =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.95" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".wasm-bindgen."0.2.96" {
inherit profileName;
}).out;
};
@ -13170,7 +13202,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
synstructure =
@ -13229,7 +13261,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};
@ -13277,7 +13309,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
synstructure =
@ -13353,7 +13385,7 @@ else
inherit profileName;
}).out;
syn =
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.89" {
(rustPackages."registry+https://github.com/rust-lang/crates.io-index".syn."2.0.90" {
inherit profileName;
}).out;
};

View file

@ -124,7 +124,7 @@ impl CaStore {
.part_number(i)
.send();
let (_, part_upload_result) = try_join!(
let ((), part_upload_result) = try_join!(
async { hasher_job.await.context("Awaiting hasher job") },
async { part_upload_fut.await.context("Awaiting uploader job") }
)
@ -192,7 +192,10 @@ impl CaStore {
///
/// This function returns an error if loading file matadata fails
#[instrument]
pub async fn download(&self, hash: blake3::Hash) -> Result<(Option<i64>, SdkBody)> {
pub async fn download_bytestream(
&self,
hash: blake3::Hash,
) -> Result<(Option<i64>, ByteStream)> {
let key = lexicographic_base64::encode(hash.as_bytes());
let file = self
.client
@ -202,6 +205,17 @@ impl CaStore {
.send()
.await
.with_context(|| format!("Downloading content-addressed file {key}"))?;
Ok((file.content_length, file.body.into_inner()))
Ok((file.content_length, file.body))
}
/// Downloads a file from the CA store backend with its hash
///
/// # Errors
///
/// This function returns an error if loading file matadata fails
#[instrument]
pub async fn download(&self, hash: blake3::Hash) -> Result<(Option<i64>, SdkBody)> {
let (length, body) = self.download_bytestream(hash).await?;
Ok((length, body.into_inner()))
}
}

View file

@ -13,6 +13,7 @@ rustls = "0.23.18"
tokio = { version = "1.41.1", features = ["net"] }
tokio-rustls = "0.26.0"
tracing = "0.1.40"
url = "2.5.4"
[lints.rust]
deprecated-safe = "forbid"
elided_lifetimes_in_paths = "warn"

View file

@ -1,26 +1,95 @@
//! Gemini server implementation for chir.rs
use core::str;
use std::sync::Arc;
use bytes::BytesMut;
use chir_rs_castore::CaStore;
use chir_rs_config::ChirRs;
use chir_rs_db::Database;
use eyre::Result;
use chir_rs_db::{file::File, Database};
use eyre::{bail, Result};
use rustls::pki_types::{pem::PemObject, CertificateDer, PrivateKeyDer};
use tokio::{
io::{AsyncReadExt, AsyncWriteExt},
net::TcpListener,
};
use tokio_rustls::TlsAcceptor;
use tracing::{error, info};
use tracing::{error, info, instrument};
use url::Url;
#[instrument(skip(stream))]
async fn handle_request<W>(
cfg: &Arc<ChirRs>,
req: Url,
mut stream: W,
db: &Database,
ca: &CaStore,
) -> Result<()>
where
W: AsyncWriteExt + Unpin + Send,
{
if req.host_str() != Some(&cfg.gemini.host) {
stream.write_all(b"53\r\n").await?;
return Ok(());
}
let mut chosen_file = File::get_by_path_mime(db, req.path(), "text/gemini").await?;
if chosen_file.is_none() {
chosen_file = File::get_by_path(db, req.path()).await?.first().cloned();
}
let Some(chosen_file) = chosen_file else {
stream.write_all(b"51\r\n").await?;
return Ok(());
};
stream.write_all(b"20 ").await?;
stream
.write_all(chosen_file.mime.as_ref().as_bytes())
.await?;
stream.write_all(b"\r\n").await?;
let (_, body) = ca.download_bytestream(chosen_file.b3hash).await?;
let mut body = body.into_async_read();
let mut buf = BytesMut::with_capacity(16 * 1024 * 1024);
loop {
buf.clear();
body.read_buf(&mut buf).await?;
if buf.is_empty() {
break;
}
stream.write_all(&buf).await?;
}
Ok(())
}
/// Parses a gemini request
///
/// # Errors
/// This function returns an error if the request is invalid.
fn parse_request(request: &[u8]) -> Result<Url> {
if &request[request.len() - 2..] != b"\r\n" {
bail!("Invalid request: {request:?} (missing CRLF)");
}
let url = str::from_utf8(&request[..request.len() - 2])?;
let url = Url::parse(url)?;
if !url.has_host() {
bail!("Host required for request: {request:?}");
}
if url.scheme() != "gemini" {
bail!("gemini scheme required for request: {request:?}");
}
Ok(url)
}
/// entrypoint for the gemini server
///
/// # Errors
///
/// This function returns an error if starting the gemini server fails
pub async fn main(cfg: Arc<ChirRs>, _: Database, _: CaStore) -> Result<()> {
pub async fn main(cfg: Arc<ChirRs>, db: Database, ca: CaStore) -> Result<()> {
let certs =
CertificateDer::pem_file_iter(&cfg.gemini.certificate)?.collect::<Result<Vec<_>, _>>()?;
let key = PrivateKeyDer::from_pem_file(&cfg.gemini.private_key)?;
@ -36,12 +105,27 @@ pub async fn main(cfg: Arc<ChirRs>, _: Database, _: CaStore) -> Result<()> {
loop {
let (stream, _peer_addr) = listener.accept().await?;
let acceptor = acceptor.clone();
let cfg2 = Arc::clone(&cfg);
let db2 = db.clone();
let ca2 = ca.clone();
let fut = async move {
let mut stream = acceptor.accept(stream).await?;
let mut request = BytesMut::with_capacity(4096);
stream.read_buf(&mut request).await?;
println!("{request:?}");
stream.write_all(b"51\r\n").await?;
let req = match parse_request(&request) {
Ok(u) => u,
Err(e) => {
info!("{e:?}");
stream.write_all(b"59\r\n").await?;
stream.shutdown().await?;
return Ok::<_, eyre::Report>(());
}
};
let cfg = cfg2;
handle_request(&cfg, req, &mut stream, &db2, &ca2).await?;
stream.shutdown().await?;
Ok::<_, eyre::Report>(())
};

View file

@ -5,7 +5,7 @@ use axum::{
extract::State,
http::{
header::{ACCEPT, CACHE_CONTROL, CONTENT_LENGTH, CONTENT_TYPE, ETAG, IF_NONE_MATCH},
response, HeaderMap, StatusCode, Uri,
HeaderMap, StatusCode, Uri,
},
response::Response,
};