made room for update

This commit is contained in:
mb 2022-08-23 15:54:40 +03:00
parent 0d99c753ed
commit b3dcb80a6f
17 changed files with 0 additions and 1338 deletions

3
.gitignore vendored
View file

@ -1,3 +0,0 @@
/target
/database
/config.ron

843
Cargo.lock generated
View file

@ -1,843 +0,0 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "async-trait"
version = "0.1.51"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "44318e776df68115a881de9a8fd1b9e53368d7a4a5ce4cc48517da3393233a5e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "atty"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
dependencies = [
"hermit-abi",
"libc",
"winapi",
]
[[package]]
name = "autocfg"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a"
[[package]]
name = "axum"
version = "0.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c5e874ee652f2ec443faed3073b80f0ac7a2042a3605fc0704d28bbbf22d623c"
dependencies = [
"async-trait",
"bitflags",
"bytes",
"futures-util",
"http",
"http-body",
"hyper",
"matchit",
"mime",
"percent-encoding",
"pin-project-lite",
"serde",
"serde_json",
"serde_urlencoded",
"sync_wrapper",
"tokio",
"tokio-util",
"tower",
"tower-http",
"tower-layer",
"tower-service",
]
[[package]]
name = "base64"
version = "0.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
[[package]]
name = "bitflags"
version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]]
name = "byteorder"
version = "1.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "14c189c53d098945499cdfa7ecc63567cf3886b3332b312a5b4585d8d3a6a610"
[[package]]
name = "bytes"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c4872d67bab6358e59559027aa3b9157c53d9358c51423c17554809a8858e0f8"
[[package]]
name = "cfg-if"
version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "chrono"
version = "0.4.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "670ad68c9088c2a963aaa298cb369688cf3f9465ce5e2d4ca10e6e0098a1ce73"
dependencies = [
"libc",
"num-integer",
"num-traits",
"time",
"winapi",
]
[[package]]
name = "colored"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b3616f750b84d8f0de8a58bda93e08e2a81ad3f523089b05f1dffecab48c6cbd"
dependencies = [
"atty",
"lazy_static",
"winapi",
]
[[package]]
name = "crc32fast"
version = "1.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "81156fece84ab6a9f2afdb109ce3ae577e42b1228441eded99bd77f627953b1a"
dependencies = [
"cfg-if",
]
[[package]]
name = "crossbeam-epoch"
version = "0.9.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4ec02e091aa634e2c3ada4a392989e7c3116673ef0ac5b72232439094d73b7fd"
dependencies = [
"cfg-if",
"crossbeam-utils",
"lazy_static",
"memoffset",
"scopeguard",
]
[[package]]
name = "crossbeam-utils"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d82cfc11ce7f2c3faef78d8a684447b40d503d9681acebed6cb728d45940c4db"
dependencies = [
"cfg-if",
"lazy_static",
]
[[package]]
name = "fnv"
version = "1.0.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
[[package]]
name = "form_urlencoded"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5fc25a87fa4fd2094bffb06925852034d90a17f0d1e05197d4956d3555752191"
dependencies = [
"matches",
"percent-encoding",
]
[[package]]
name = "fs2"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9564fc758e15025b46aa6643b1b77d047d1a56a1aea6e01002ac0c7026876213"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "futures-channel"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5da6ba8c3bb3c165d3c7319fc1cc8304facf1fb8db99c5de877183c08a273888"
dependencies = [
"futures-core",
]
[[package]]
name = "futures-core"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "88d1c26957f23603395cd326b0ffe64124b818f4449552f960d815cfba83a53d"
[[package]]
name = "futures-sink"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36ea153c13024fe480590b3e3d4cad89a0cfacecc24577b68f86c6ced9c2bc11"
[[package]]
name = "futures-task"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1d3d00f4eddb73e498a54394f228cd55853bdf059259e8e7bc6e69d408892e99"
[[package]]
name = "futures-util"
version = "0.3.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36568465210a3a6ee45e1f165136d68671471a501e632e9a98d96872222b5481"
dependencies = [
"autocfg",
"futures-core",
"futures-task",
"pin-project-lite",
"pin-utils",
]
[[package]]
name = "fxhash"
version = "0.2.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c31b6d751ae2c7f11320402d34e41349dd1016f8d5d45e48c4312bc8625af50c"
dependencies = [
"byteorder",
]
[[package]]
name = "harsh"
version = "0.1.0"
dependencies = [
"axum",
"chrono",
"colored",
"ron",
"serde",
"serde_json",
"sled",
"tokio",
]
[[package]]
name = "hermit-abi"
version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [
"libc",
]
[[package]]
name = "http"
version = "0.2.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1323096b05d41827dadeaee54c9981958c0f94e670bc94ed80037d1a7b8b186b"
dependencies = [
"bytes",
"fnv",
"itoa",
]
[[package]]
name = "http-body"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ff4f84919677303da5f147645dbea6b1881f368d03ac84e1dc09031ebd7b2c6"
dependencies = [
"bytes",
"http",
"pin-project-lite",
]
[[package]]
name = "httparse"
version = "1.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "acd94fdbe1d4ff688b67b04eee2e17bd50995534a61539e45adfefb45e5e5503"
[[package]]
name = "httpdate"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6456b8a6c8f33fee7d958fcd1b60d55b11940a79e63ae87013e6d22e26034440"
[[package]]
name = "hyper"
version = "0.14.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2b91bb1f221b6ea1f1e4371216b70f40748774c2fb5971b450c07773fb92d26b"
dependencies = [
"bytes",
"futures-channel",
"futures-core",
"futures-util",
"http",
"http-body",
"httparse",
"httpdate",
"itoa",
"pin-project-lite",
"socket2",
"tokio",
"tower-service",
"tracing",
"want",
]
[[package]]
name = "instant"
version = "0.1.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7a5bbe824c507c5da5956355e86a746d82e0e1464f65d862cc5e71da70e94b2c"
dependencies = [
"cfg-if",
]
[[package]]
name = "itoa"
version = "0.4.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b71991ff56294aa922b450139ee08b3bfc70982c6b2c7562771375cf73542dd4"
[[package]]
name = "lazy_static"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646"
[[package]]
name = "libc"
version = "0.2.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fbe5e23404da5b4f555ef85ebed98fb4083e55a00c317800bc2a50ede9f3d219"
[[package]]
name = "lock_api"
version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "712a4d093c9976e24e7dbca41db895dabcbac38eb5f4045393d17a95bdfb1109"
dependencies = [
"scopeguard",
]
[[package]]
name = "log"
version = "0.4.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "51b9bbe6c47d51fc3e1a9b945965946b4c44142ab8792c50835a980d362c2710"
dependencies = [
"cfg-if",
]
[[package]]
name = "matches"
version = "0.1.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a3e378b66a060d48947b590737b30a1be76706c8dd7b8ba0f2fe3989c68a853f"
[[package]]
name = "matchit"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "58b6f41fdfbec185dd3dff58b51e323f5bc61692c0de38419a957b0dcfccca3c"
[[package]]
name = "memchr"
version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "308cc39be01b73d0d18f82a0e7b2a3df85245f84af96fdddc5d202d27e47b86a"
[[package]]
name = "memoffset"
version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59accc507f1338036a0477ef61afdae33cde60840f4dfe481319ce3ad116ddf9"
dependencies = [
"autocfg",
]
[[package]]
name = "mime"
version = "0.3.16"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "2a60c7ce501c71e03a9c9c0d35b861413ae925bd979cc7a4e30d060069aaac8d"
[[package]]
name = "mio"
version = "0.7.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8067b404fe97c70829f082dec8bcf4f71225d7eaea1d8645349cb76fa06205cc"
dependencies = [
"libc",
"log",
"miow",
"ntapi",
"winapi",
]
[[package]]
name = "miow"
version = "0.3.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b9f1c5b025cda876f66ef43a113f91ebc9f4ccef34843000e0adf6ebbab84e21"
dependencies = [
"winapi",
]
[[package]]
name = "ntapi"
version = "0.3.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3f6bb902e437b6d86e03cce10a7e2af662292c5dfef23b65899ea3ac9354ad44"
dependencies = [
"winapi",
]
[[package]]
name = "num-integer"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d2cc698a63b549a70bc047073d2949cce27cd1c7b0a4a862d08a8031bc2801db"
dependencies = [
"autocfg",
"num-traits",
]
[[package]]
name = "num-traits"
version = "0.2.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9a64b1ec5cda2586e284722486d802acf1f7dbdc623e2bfc57e65ca1cd099290"
dependencies = [
"autocfg",
]
[[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.8.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "692fcb63b64b1758029e0a96ee63e049ce8c5948587f2f7208df04625e5f6b56"
[[package]]
name = "parking_lot"
version = "0.11.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99"
dependencies = [
"instant",
"lock_api",
"parking_lot_core",
]
[[package]]
name = "parking_lot_core"
version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216"
dependencies = [
"cfg-if",
"instant",
"libc",
"redox_syscall",
"smallvec",
"winapi",
]
[[package]]
name = "percent-encoding"
version = "2.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d4fd5641d01c8f18a23da7b6fe29298ff4b55afcccdf78973b24cf3175fee32e"
[[package]]
name = "pin-project"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "576bc800220cc65dac09e99e97b08b358cfab6e17078de8dc5fee223bd2d0c08"
dependencies = [
"pin-project-internal",
]
[[package]]
name = "pin-project-internal"
version = "1.0.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e8fe8163d14ce7f0cdac2e040116f22eac817edabff0be91e8aff7e9accf389"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "pin-project-lite"
version = "0.2.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8d31d11c69a6b52a174b42bdc0c30e5e11670f90788b2c471c31c1d17d449443"
[[package]]
name = "pin-utils"
version = "0.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
[[package]]
name = "proc-macro2"
version = "1.0.32"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ba508cc11742c0dc5c1659771673afbab7a0efab23aa17e854cbab0837ed0b43"
dependencies = [
"unicode-xid",
]
[[package]]
name = "quote"
version = "1.0.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "38bc8cc6a5f2e3655e0899c1b848643b2562f853f114bfec7be120678e3ace05"
dependencies = [
"proc-macro2",
]
[[package]]
name = "redox_syscall"
version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8383f39639269cde97d255a32bdb68c047337295414940c68bdd30c2e13203ff"
dependencies = [
"bitflags",
]
[[package]]
name = "ron"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b861ecaade43ac97886a512b360d01d66be9f41f3c61088b42cedf92e03d678"
dependencies = [
"base64",
"bitflags",
"serde",
]
[[package]]
name = "ryu"
version = "1.0.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71d301d4193d031abdd79ff7e3dd721168a9572ef3fe51a1517aba235bd8f86e"
[[package]]
name = "scopeguard"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
[[package]]
name = "serde"
version = "1.0.130"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f12d06de37cf59146fbdecab66aa99f9fe4f78722e3607577a5375d66bd0c913"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.130"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d7bc1a1ab1961464eae040d96713baa5a724a8152c1222492465b54322ec508b"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.69"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e466864e431129c7e0d3476b92f20458e5879919a0596c6472738d9fa2d342f8"
dependencies = [
"itoa",
"ryu",
"serde",
]
[[package]]
name = "serde_urlencoded"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "edfa57a7f8d9c1d260a549e7224100f6c43d43f9103e06dd8b4095a9b2b43ce9"
dependencies = [
"form_urlencoded",
"itoa",
"ryu",
"serde",
]
[[package]]
name = "signal-hook-registry"
version = "1.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e51e73328dc4ac0c7ccbda3a494dfa03df1de2f46018127f60c693f2648455b0"
dependencies = [
"libc",
]
[[package]]
name = "sled"
version = "0.34.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7f96b4737c2ce5987354855aed3797279def4ebf734436c6aa4552cf8e169935"
dependencies = [
"crc32fast",
"crossbeam-epoch",
"crossbeam-utils",
"fs2",
"fxhash",
"libc",
"log",
"parking_lot",
]
[[package]]
name = "smallvec"
version = "1.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ecab6c735a6bb4139c0caafd0cc3635748bbb3acf4550e8138122099251f309"
[[package]]
name = "socket2"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5dc90fe6c7be1a323296982db1836d1ea9e47b6839496dde9a541bc496df3516"
dependencies = [
"libc",
"winapi",
]
[[package]]
name = "syn"
version = "1.0.81"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f2afee18b8beb5a596ecb4a2dce128c719b4ba399d34126b9e4396e3f9860966"
dependencies = [
"proc-macro2",
"quote",
"unicode-xid",
]
[[package]]
name = "sync_wrapper"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "20518fe4a4c9acf048008599e464deb21beeae3d3578418951a189c235a7a9a8"
[[package]]
name = "time"
version = "0.1.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
dependencies = [
"libc",
"wasi",
"winapi",
]
[[package]]
name = "tokio"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "588b2d10a336da58d877567cd8fb8a14b463e2104910f8132cd054b4b96e29ee"
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.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "114383b041aa6212c579467afa0075fbbdd0718de036100bc0ba7961d8cb9095"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tokio-util"
version = "0.6.9"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9e99e1983e5d376cd8eb4b66604d2e99e79f5bd988c3055891dcd8c9e2604cc0"
dependencies = [
"bytes",
"futures-core",
"futures-sink",
"log",
"pin-project-lite",
"tokio",
]
[[package]]
name = "tower"
version = "0.4.10"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c00e500fff5fa1131c866b246041a6bf96da9c965f8fe4128cb1421f23e93c00"
dependencies = [
"futures-core",
"futures-util",
"pin-project",
"pin-project-lite",
"tokio",
"tokio-util",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
name = "tower-http"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0b7b56efe69aa0ad2b5da6b942e57ea9f6fe683b7a314d4ff48662e2c8838de1"
dependencies = [
"bytes",
"futures-core",
"futures-util",
"http",
"http-body",
"pin-project",
"tower-layer",
"tower-service",
]
[[package]]
name = "tower-layer"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "343bc9466d3fe6b0f960ef45960509f84480bf4fd96f92901afe7ff3df9d3a62"
[[package]]
name = "tower-service"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "360dfd1d6d30e05fda32ace2c8c70e9c0a9da713275777f5a4dbb8a1893930c6"
[[package]]
name = "tracing"
version = "0.1.29"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
dependencies = [
"cfg-if",
"log",
"pin-project-lite",
"tracing-attributes",
"tracing-core",
]
[[package]]
name = "tracing-attributes"
version = "0.1.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "tracing-core"
version = "0.1.21"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
dependencies = [
"lazy_static",
]
[[package]]
name = "try-lock"
version = "0.2.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642"
[[package]]
name = "unicode-xid"
version = "0.2.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ccb82d61f80a663efe1f787a51b16b5a51e3314d6ac365b08639f52387b33f3"
[[package]]
name = "want"
version = "0.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1ce8a968cb1cd110d136ff8b819a556d6fb6d919363c61534f6860c7eb172ba0"
dependencies = [
"log",
"try-lock",
]
[[package]]
name = "wasi"
version = "0.10.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
[[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"

View file

@ -1,27 +0,0 @@
[package]
name = "harsh"
version = "0.1.0"
edition = "2018"
description = "Harmony server application"
[dependencies]
# async engine
tokio = { version = "1.13.0", features = ["full"] }
# http client
axum = "0.3.2"
# database
sled = "0.34.7"
# serialization
serde = { version = "1.0.130", features = ["derive"] }
serde_json = "1.0.69"
# useful for logging
chrono = "0.4.19"
colored = "2.0.0"
# serialization format of config files
ron = "0.7.0"

View file

@ -1,7 +0,0 @@
# harsh
![harsh icon](./assets/icon_256.png)
## Description
harsh is a Harmony server made in rust.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 113 KiB

View file

@ -1 +0,0 @@
hard_tabs = true

View file

@ -1,61 +0,0 @@
use std::fs::{read_to_string, write};
use ron;
use serde::{Deserialize, Serialize};
use super::harsh::Error;
///
/// Encapsulate a configuration for the server
///
#[derive(Clone, Serialize, Deserialize)]
pub struct Configuration {
pub database_path: String, //
pub port: u32,
}
static CONFIG_PATHS: [&str; 2] = ["./config.ron", "/etc/harsh/harsh.ron"];
impl Configuration {
/// try to read the configuration from local file or load default
pub fn get() -> Self {
match Self::try_from_file() {
Ok(config) => config,
Err(_) => {
let result = Configuration::default();
Configuration::write_config(&result);
result
}
}
}
fn try_from_file() -> Result<Self, Error> {
let content = Self::try_read()?;
let config: Configuration = ron::from_str(&content)?;
Ok(config)
}
fn try_read() -> Result<String, Error> {
for path in CONFIG_PATHS {
match read_to_string(path) {
Ok(serialized) => return Ok(serialized),
_ => (),
}
}
Err("unable to locate or read config file".to_string().into())
}
fn write_config(data: &Self) {
let serialized = ron::to_string(data).unwrap();
write(CONFIG_PATHS[0], serialized).unwrap_or_else(|_| ());
}
}
impl Default for Configuration {
fn default() -> Self {
Self {
database_path: "./database".to_string(),
port: 42069, // haha funny number
}
}
}

View file

@ -1,103 +0,0 @@
pub mod models;
use std::time::{SystemTime, UNIX_EPOCH};
use serde::{de::DeserializeOwned, Serialize};
use sled::Db;
use self::models::*;
use super::{
config::Configuration,
harsh::Error,
log::{Loggable, Logger},
};
///
/// handle the database access
///
pub struct DbManager {
path: String,
handle: Option<Db>,
logger: Logger,
}
impl DbManager {
/// constructor
pub fn new(config: Configuration, logger: Logger) -> Result<Self, Error> {
let mut result = DbManager {
path: config.database_path,
handle: None,
logger,
};
result.info("ininitalized new manager");
result.open_db()?;
result.info("openned database");
Ok(result)
}
fn open_db(&mut self) -> Result<(), Error> {
let handle = sled::open(&self.path)?;
self.handle = Some(handle);
Ok(())
}
pub fn create_user(&self, username: String, password: String) -> Result<User, Error> {
let id = new_id(Prefixes::User);
let user = User {
username,
password,
id,
};
let path = format!("/user/{}", id);
let serialized = serialize(&user)?;
self.handle().insert(path, serialized)?;
Ok(user)
}
// pub fn verify_user(&self, username: String, password: String) -> Result<User, Error> {}
fn handle(&self) -> &Db {
let db = match &self.handle {
None => unreachable!(),
Some(h) => h,
};
db
}
}
impl Loggable for DbManager {
fn name(&self) -> String {
"db manager".to_string()
}
fn logger(&self) -> Logger {
self.logger.clone()
}
}
fn new_id(prefix: Prefixes) -> Id {
let prefix = prefix as u8;
let timestamp = SystemTime::now();
let duration = timestamp.duration_since(UNIX_EPOCH).unwrap();
let result = duration.as_millis() as Id;
let result = (result << 256) + (prefix as Id);
result
}
fn serialize<T: Serialize + Sized>(item: &T) -> Result<Vec<u8>, Error> {
let serialized = serde_json::to_string(item)?;
let array = serialized.as_bytes();
let result = Vec::from(array);
Ok(result)
}
fn deserialize<T: DeserializeOwned + Sized>(serialized: &[u8]) -> Result<T, Error> {
let data = String::from_utf8(serialized.to_vec())?.clone();
let result = serde_json::from_str::<T>(&data)?;
Ok(result)
}

View file

@ -1,31 +0,0 @@
#![allow(unused, dead_code)]
use serde::{Deserialize, Serialize};
pub type Id = u64;
pub enum Prefixes {
Message = 0,
User = 10,
Channel = 20,
}
#[derive(Serialize, Deserialize)]
pub struct User {
pub username: String,
pub password: String,
pub id: Id,
}
#[derive(Serialize, Deserialize)]
pub struct Channel {
pub name: String,
pub id: Id,
pub messages: Vec<Id>,
}
#[derive(Serialize, Deserialize)]
pub struct Message {
pub content: String,
pub id: Id,
}

View file

@ -1,69 +0,0 @@
use std::error;
use std::sync::{Arc, RwLock};
use super::config::Configuration;
use super::db::DbManager;
use super::http::HttpManager;
use super::log::Logger;
///
/// main function
///
pub async fn main() {
let configuration = Configuration::get();
let instance = Harsh::new(configuration);
instance.serve().await;
}
pub struct Harsh {
pub shared_state: SharedState,
pub http_manager: HttpManager,
}
impl Harsh {
pub fn new(configuration: Configuration) -> Self {
let logger = Logger::new(configuration.clone());
let db_manager = DbManager::new(configuration.clone(), logger.clone())
.expect("failed to open / create database");
let shared_state = State::new_shared(db_manager, logger.clone());
let http_manager = HttpManager::new(configuration.clone(), shared_state.clone());
Harsh {
shared_state,
http_manager,
}
}
pub async fn serve(self) {
self.http_manager.serve().await;
}
}
///
/// shared state arround the app
///
pub struct State {
pub db_manager: RwLock<DbManager>,
pub logger: RwLock<Logger>,
}
impl State {
pub fn new_shared(db_manager: DbManager, logger: Logger) -> SharedState {
logger.info("initialized shared state");
let state = State {
db_manager: RwLock::new(db_manager),
logger: RwLock::new(logger),
};
Arc::new(state)
}
}
///
/// safe pointer to the shared state
///
pub type SharedState = Arc<State>;
///
/// error type for now..
///
pub type Error = Box<dyn error::Error>;

View file

@ -1,64 +0,0 @@
///
/// contains every route handlers
///
mod routes;
///
/// contains every models used by the http server
///
pub mod models;
use axum::{AddExtensionLayer, Router};
use self::routes::setup_routes;
use super::config::Configuration;
use super::harsh::SharedState;
use super::log::Loggable;
use super::log::Logger;
///
/// listen for incoming requests and handle both incoming and outgoing requests
///
pub struct HttpManager {
shared_state: SharedState,
port: u32,
app: Router,
logger: Logger,
}
impl HttpManager {
/// constructor
pub fn new(config: Configuration, shared_state: SharedState) -> Self {
let app = setup_routes(Router::new()).layer(AddExtensionLayer::new(shared_state.clone()));
let logger = shared_state.logger.try_read().unwrap().clone();
let result = HttpManager {
shared_state: shared_state.clone(),
port: config.port,
app,
logger,
};
result.info("initialized new manager");
result
}
/// listen for and handle received requests
pub async fn serve(self) {
let address = format!("0.0.0.0:{}", self.port).parse().unwrap();
self.info(format!("listening to address '{}'", address));
let server = axum::Server::bind(&address).serve(self.app.into_make_service());
server.await.unwrap();
}
}
impl Loggable for HttpManager {
fn name(&self) -> String {
"http manager".to_string()
}
fn logger(&self) -> Logger {
self.logger.clone()
}
}

View file

@ -1,18 +0,0 @@
#![allow(unused, dead_code)]
use serde::{Deserialize, Serialize};
#[derive(Serialize, Deserialize)]
pub struct CreateUser {
name: String,
password: String,
}
pub struct EditUser {
//
}
pub struct DeleteUser {
name: String,
password: String,
}

View file

@ -1,17 +0,0 @@
use axum::extract::{Extension, Json};
use axum::routing::get;
use axum::Router;
use crate::lib::harsh::SharedState;
use super::models::*;
pub fn setup_routes(app: Router) -> Router {
app.route("/user/create", get(create_user))
}
async fn create_user(Extension(state): Extension<SharedState>, Json(payload): Json<CreateUser>) {
// TODO: security check
//state.db_manager.;
}

View file

@ -1,61 +0,0 @@
use super::config::Configuration;
use chrono::prelude::*;
use colored::Colorize;
///
/// configurable structure with methods to log informations in different ways
///
#[derive(Clone)]
pub struct Logger {
//
}
impl Logger {
/// adapt the static instance according to parameters specified by the configuration
pub fn new(_config: Configuration) -> Self {
Logger {}
}
pub fn info<T: Into<String>>(&self, msg: T) {
println!("{} {} {}", time_segment(), "[info]".blue(), msg.into());
}
pub fn warn<T: Into<String>>(&self, msg: T) {
println!("{} {} {}", time_segment(), "[warn]".yellow(), msg.into());
}
pub fn fail<T: Into<String>>(&self, msg: T) {
println!("{} {} {}", time_segment(), "[fail]".red(), msg.into());
}
}
/// make the time segment of a log
fn time_segment() -> String {
let now = Local::now();
let result = now.format("[%Y.%m.%d-%H:%M:%S]").to_string();
result
}
pub trait Loggable {
fn name(&self) -> String;
fn logger(&self) -> Logger;
fn info<T: Into<String>>(&self, msg: T) {
self.logger().info(self.format_message(msg));
}
fn warn<T: Into<String>>(&self, msg: T) {
self.logger().warn(self.format_message(msg));
}
fn fail<T: Into<String>>(&self, msg: T) {
self.logger().fail(self.format_message(msg));
}
fn format_message<T: Into<String>>(&self, msg: T) -> String {
let message: String = msg.into();
let formatted = format!("[{}] {}", self.name(), message);
formatted
}
}

View file

@ -1,24 +0,0 @@
///
/// encapsulate the logic responsible for reading and parsing the server configuration
///
pub mod config;
///
/// encapsulate the logic responsible for interacting with the database
///
pub mod db;
///
/// main module, exposes the highest level structure holding the whole server runtime logic
///
pub mod harsh;
///
/// encapsulate the logic responsible for receiving and routing http requests
///
pub mod http;
///
/// encapsulate the logic responsible for logging events occuring while the server is running
///
pub mod log;

View file

@ -1,9 +0,0 @@
///
/// library module
///
pub mod lib;
#[tokio::main]
pub async fn main() {
lib::harsh::main().await;
}