forked from Roflin/gamenight
		
	Started working on a cli frontend.
This commit is contained in:
		
							parent
							
								
									02913c7b52
								
							
						
					
					
						commit
						db25dc0aed
					
				
							
								
								
									
										320
									
								
								backend-actix/Cargo.lock
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										320
									
								
								backend-actix/Cargo.lock
									
									
									
										generated
									
									
									
								
							@ -254,6 +254,56 @@ dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anstream"
 | 
			
		||||
version = "0.6.18"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anstyle",
 | 
			
		||||
 "anstyle-parse",
 | 
			
		||||
 "anstyle-query",
 | 
			
		||||
 "anstyle-wincon",
 | 
			
		||||
 "colorchoice",
 | 
			
		||||
 "is_terminal_polyfill",
 | 
			
		||||
 "utf8parse",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anstyle"
 | 
			
		||||
version = "1.0.10"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anstyle-parse"
 | 
			
		||||
version = "0.2.6"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "utf8parse",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anstyle-query"
 | 
			
		||||
version = "1.1.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-sys 0.59.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "anstyle-wincon"
 | 
			
		||||
version = "3.0.7"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "ca3534e77181a9cc07539ad51f2141fe32f6c3ffd4df76db8ad92346b003ae4e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anstyle",
 | 
			
		||||
 "once_cell",
 | 
			
		||||
 "windows-sys 0.59.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "argon2"
 | 
			
		||||
version = "0.5.3"
 | 
			
		||||
@ -283,10 +333,12 @@ dependencies = [
 | 
			
		||||
 "diesel",
 | 
			
		||||
 "diesel-derive-enum",
 | 
			
		||||
 "diesel_migrations",
 | 
			
		||||
 "env_logger",
 | 
			
		||||
 "jsonwebtoken",
 | 
			
		||||
 "rand_core 0.9.3",
 | 
			
		||||
 "serde",
 | 
			
		||||
 "serde_json",
 | 
			
		||||
 "tracing-actix-web",
 | 
			
		||||
 "uuid",
 | 
			
		||||
 "validator",
 | 
			
		||||
]
 | 
			
		||||
@ -355,9 +407,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "brotli-decompressor"
 | 
			
		||||
version = "4.0.2"
 | 
			
		||||
version = "4.0.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "74fa05ad7d803d413eb8380983b092cbbaf9a85f151b871360e7b00cd7060b37"
 | 
			
		||||
checksum = "a334ef7c9e23abf0ce748e8cd309037da93e606ad52eb372e4ce327a0dcfbdfd"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "alloc-no-stdlib",
 | 
			
		||||
 "alloc-stdlib",
 | 
			
		||||
@ -392,9 +444,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cc"
 | 
			
		||||
version = "1.2.17"
 | 
			
		||||
version = "1.2.19"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a"
 | 
			
		||||
checksum = "8e3a13707ac958681c13b39b458c073d0d9bc8a22cb1b2f4c8e55eb72c13f362"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "jobserver",
 | 
			
		||||
 "libc",
 | 
			
		||||
@ -422,6 +474,12 @@ dependencies = [
 | 
			
		||||
 "windows-link",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "colorchoice"
 | 
			
		||||
version = "1.0.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "cookie"
 | 
			
		||||
version = "0.16.2"
 | 
			
		||||
@ -504,9 +562,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "deranged"
 | 
			
		||||
version = "0.4.1"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "28cfac68e08048ae1883171632c2aef3ebc555621ae56fbccce1cbf22dd7f058"
 | 
			
		||||
checksum = "9c9e6a11ca8224451684bc0d7d5a7adbf8f2fd6887261a1cfc3c0432f9d4068e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "powerfmt",
 | 
			
		||||
]
 | 
			
		||||
@ -534,9 +592,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "diesel"
 | 
			
		||||
version = "2.2.8"
 | 
			
		||||
version = "2.2.9"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "470eb10efc8646313634c99bb1593f402a6434cbd86e266770c6e39219adb86a"
 | 
			
		||||
checksum = "34d3950690ba3a6910126162b47e775e203006d4242a15de912bec6c0a695153"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags",
 | 
			
		||||
 "byteorder",
 | 
			
		||||
@ -644,6 +702,29 @@ dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "env_filter"
 | 
			
		||||
version = "0.1.3"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "186e05a59d4c50738528153b83b0b0194d3a29507dfec16eccd4b342903397d0"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "log",
 | 
			
		||||
 "regex",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "env_logger"
 | 
			
		||||
version = "0.11.8"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "13c863f0904021b108aa8b2f55046443e6b1ebde8fd4a15c399893aae4fa069f"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "anstream",
 | 
			
		||||
 "anstyle",
 | 
			
		||||
 "env_filter",
 | 
			
		||||
 "jiff",
 | 
			
		||||
 "log",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "equivalent"
 | 
			
		||||
version = "1.0.2"
 | 
			
		||||
@ -652,9 +733,9 @@ checksum = "877a4ace8713b0bcf2a4e7eec82529c029f1d0619886d18145fea96c3ffe5c0f"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "flate2"
 | 
			
		||||
version = "1.1.0"
 | 
			
		||||
version = "1.1.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "11faaf5a5236997af9848be0bef4db95824b1d534ebc64d0f0c6cf3e67bd38dc"
 | 
			
		||||
checksum = "7ced92e76e966ca2fd84c8f7aa01a4aea65b0eb6648d72f7c8f3e2764a67fece"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "crc32fast",
 | 
			
		||||
 "miniz_oxide",
 | 
			
		||||
@ -724,9 +805,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "getrandom"
 | 
			
		||||
version = "0.2.15"
 | 
			
		||||
version = "0.2.16"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
 | 
			
		||||
checksum = "335ff9f135e4384c8150d6f27c6daed433577f86b4750418338c01a1a2528592"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "js-sys",
 | 
			
		||||
@ -815,9 +896,9 @@ checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "iana-time-zone"
 | 
			
		||||
version = "0.1.62"
 | 
			
		||||
version = "0.1.63"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b2fd658b06e56721792c5df4475705b6cda790e9298d19d2f8af083457bcd127"
 | 
			
		||||
checksum = "b0c919e5debc312ad217002b8048a17b7d83f80703865bbfcfebb0458b0b27d8"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "android_system_properties",
 | 
			
		||||
 "core-foundation-sys",
 | 
			
		||||
@ -990,14 +1071,20 @@ checksum = "e8a5a9a0ff0086c7a148acb942baaabeadf9504d10400b5a05645853729b9cd2"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "indexmap"
 | 
			
		||||
version = "2.8.0"
 | 
			
		||||
version = "2.9.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3954d50fe15b02142bf25d3b8bdadb634ec3948f103d04ffe3031bc8fe9d7058"
 | 
			
		||||
checksum = "cea70ddb795996207ad57735b50c5982d8844f38ba9ee5f1aedcfb708a2aa11e"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "equivalent",
 | 
			
		||||
 "hashbrown",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "is_terminal_polyfill"
 | 
			
		||||
version = "1.70.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "itoa"
 | 
			
		||||
version = "1.0.15"
 | 
			
		||||
@ -1005,11 +1092,36 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "4a5f13b858c8d314ee3e8f639011f7ccefe71f97f96e50151fb991f267928e2c"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "jobserver"
 | 
			
		||||
version = "0.1.32"
 | 
			
		||||
name = "jiff"
 | 
			
		||||
version = "0.2.10"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0"
 | 
			
		||||
checksum = "5a064218214dc6a10fbae5ec5fa888d80c45d611aba169222fc272072bf7aef6"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "jiff-static",
 | 
			
		||||
 "log",
 | 
			
		||||
 "portable-atomic",
 | 
			
		||||
 "portable-atomic-util",
 | 
			
		||||
 "serde",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "jiff-static"
 | 
			
		||||
version = "0.2.10"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "199b7932d97e325aff3a7030e141eafe7f2c6268e1d1b24859b753a627f45254"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "jobserver"
 | 
			
		||||
version = "0.1.33"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "38f262f097c174adebe41eb73d66ae9c06b2844fb0da69969647bbddd9b0538a"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "getrandom 0.3.2",
 | 
			
		||||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -1046,9 +1158,9 @@ checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "libc"
 | 
			
		||||
version = "0.2.171"
 | 
			
		||||
version = "0.2.172"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c19937216e9d3aa9956d9bb8dfc0b0c8beb6058fc4f7a4dc4d850edf86a237d6"
 | 
			
		||||
checksum = "d750af042f7ef4f724306de029d18836c26c1765a54a6a3f094cbd23a7267ffa"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "litemap"
 | 
			
		||||
@ -1124,9 +1236,9 @@ checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "miniz_oxide"
 | 
			
		||||
version = "0.8.5"
 | 
			
		||||
version = "0.8.8"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "8e3e04debbb59698c15bacbb6d93584a8c0ca9cc3213cb423d31f760d8843ce5"
 | 
			
		||||
checksum = "3be647b768db090acb35d5ec5db2b0e1f1de11133ca123b9eacf5137868f892a"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "adler2",
 | 
			
		||||
]
 | 
			
		||||
@ -1140,9 +1252,15 @@ dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
 "log",
 | 
			
		||||
 "wasi 0.11.0+wasi-snapshot-preview1",
 | 
			
		||||
 "windows-sys",
 | 
			
		||||
 "windows-sys 0.52.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "mutually_exclusive_features"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e94e1e6445d314f972ff7395df2de295fe51b71821694f0b0e1e79c4f12c8577"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "num-bigint"
 | 
			
		||||
version = "0.4.6"
 | 
			
		||||
@ -1242,6 +1360,26 @@ version = "2.3.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "pin-project"
 | 
			
		||||
version = "1.1.10"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "677f1add503faace112b9f1373e43e9e054bfdd22ff1a63c1bc485eaec6a6a8a"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "pin-project-internal",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "pin-project-internal"
 | 
			
		||||
version = "1.1.10"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6e918e4ff8c4549eb882f14b3a4bc8c8bc93de829416eacf579f1207a8fbf861"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "pin-project-lite"
 | 
			
		||||
version = "0.2.16"
 | 
			
		||||
@ -1260,6 +1398,21 @@ version = "0.3.32"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7edddbd0b52d732b21ad9a5fab5c704c14cd949e5e9a1ec5929a24fded1b904c"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "portable-atomic"
 | 
			
		||||
version = "1.11.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "350e9b48cbc6b0e028b0473b114454c6316e57336ee184ceab6e53f72c178b3e"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "portable-atomic-util"
 | 
			
		||||
version = "0.2.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "d8a2f0d8d040d7848a709caf78912debcc3f33ee4b3cac47d73d1e1069e83507"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "portable-atomic",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "powerfmt"
 | 
			
		||||
version = "0.2.0"
 | 
			
		||||
@ -1309,9 +1462,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "proc-macro2"
 | 
			
		||||
version = "1.0.94"
 | 
			
		||||
version = "1.0.95"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a31971752e70b8b2686d7e46ec17fb38dad4051d94024c88df49b667caea9c84"
 | 
			
		||||
checksum = "02b3e5e68a3a1a02aad3ec490a98007cbc13c37cbe84a3cd7b8e406d76e7f778"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "unicode-ident",
 | 
			
		||||
]
 | 
			
		||||
@ -1344,13 +1497,12 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "rand"
 | 
			
		||||
version = "0.9.0"
 | 
			
		||||
version = "0.9.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "3779b94aeb87e8bd4e834cee3650289ee9e0d5677f976ecdb6d219e5f4f6cd94"
 | 
			
		||||
checksum = "9fbfd9d094a40bf3ae768db9361049ace4c0e04a4fd6b359518bd7b73a73dd97"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "rand_chacha",
 | 
			
		||||
 "rand_core 0.9.3",
 | 
			
		||||
 "zerocopy",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -1380,9 +1532,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "redox_syscall"
 | 
			
		||||
version = "0.5.10"
 | 
			
		||||
version = "0.5.11"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0b8c0c260b63a8219631167be35e6a988e9554dbd323f8bd08439c8ed1302bd1"
 | 
			
		||||
checksum = "d2f103c6d277498fbceb16e84d317e2a400f160f46904d5f5410848c829511a3"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bitflags",
 | 
			
		||||
]
 | 
			
		||||
@ -1430,10 +1582,10 @@ checksum = "a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "cc",
 | 
			
		||||
 "cfg-if",
 | 
			
		||||
 "getrandom 0.2.15",
 | 
			
		||||
 "getrandom 0.2.16",
 | 
			
		||||
 "libc",
 | 
			
		||||
 "untrusted",
 | 
			
		||||
 "windows-sys",
 | 
			
		||||
 "windows-sys 0.52.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -1541,9 +1693,9 @@ checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "signal-hook-registry"
 | 
			
		||||
version = "1.4.2"
 | 
			
		||||
version = "1.4.5"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
 | 
			
		||||
checksum = "9203b8055f63a2a00e2f593bb0510367fe707d7ff1e5c872de2f537b339e5410"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
]
 | 
			
		||||
@ -1571,9 +1723,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "smallvec"
 | 
			
		||||
version = "1.14.0"
 | 
			
		||||
version = "1.15.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7fcf8323ef1faaee30a44a340193b1ac6814fd9b7b4e88e9d4519a3e4abe1cfd"
 | 
			
		||||
checksum = "8917285742e9f3e1683f0a9c4e6b57960b7314d0b08d30d1ecd426713ee2eee9"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "socket2"
 | 
			
		||||
@ -1582,7 +1734,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "4f5fd57c80058a56cf5c777ab8a126398ece8e442983605d280a44ce79d0edef"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "libc",
 | 
			
		||||
 "windows-sys",
 | 
			
		||||
 "windows-sys 0.52.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -1688,9 +1840,9 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tokio"
 | 
			
		||||
version = "1.44.1"
 | 
			
		||||
version = "1.44.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "f382da615b842244d4b8738c82ed1275e6c5dd90c459a30941cd07080b06c91a"
 | 
			
		||||
checksum = "e6b88822cbe49de4185e3a4cbf8321dd487cf5fe0c5c65695fef6346371e9c48"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "backtrace",
 | 
			
		||||
 "bytes",
 | 
			
		||||
@ -1700,14 +1852,14 @@ dependencies = [
 | 
			
		||||
 "pin-project-lite",
 | 
			
		||||
 "signal-hook-registry",
 | 
			
		||||
 "socket2",
 | 
			
		||||
 "windows-sys",
 | 
			
		||||
 "windows-sys 0.52.0",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tokio-util"
 | 
			
		||||
version = "0.7.14"
 | 
			
		||||
version = "0.7.15"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "6b9590b93e6fcc1739458317cccd391ad3955e2bde8913edf6f95f9e65a8f034"
 | 
			
		||||
checksum = "66a539a9ad6d5d281510d5bd368c973d636c02dbf8a67300bfb6b950696ad7df"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "bytes",
 | 
			
		||||
 "futures-core",
 | 
			
		||||
@ -1762,6 +1914,19 @@ dependencies = [
 | 
			
		||||
 "tracing-core",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tracing-actix-web"
 | 
			
		||||
version = "0.7.18"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "2340b7722695166c7fc9b3e3cd1166e7c74fedb9075b8f0c74d3822d2e41caf5"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "actix-web",
 | 
			
		||||
 "mutually_exclusive_features",
 | 
			
		||||
 "pin-project",
 | 
			
		||||
 "tracing",
 | 
			
		||||
 "uuid",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "tracing-attributes"
 | 
			
		||||
version = "0.1.28"
 | 
			
		||||
@ -1829,6 +1994,12 @@ version = "1.0.4"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "utf8parse"
 | 
			
		||||
version = "0.2.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "uuid"
 | 
			
		||||
version = "1.16.0"
 | 
			
		||||
@ -1956,11 +2127,37 @@ dependencies = [
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-core"
 | 
			
		||||
version = "0.52.0"
 | 
			
		||||
version = "0.61.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
 | 
			
		||||
checksum = "4763c1de310c86d75a878046489e2e5ba02c649d185f21c67d4cf8a56d098980"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-targets",
 | 
			
		||||
 "windows-implement",
 | 
			
		||||
 "windows-interface",
 | 
			
		||||
 "windows-link",
 | 
			
		||||
 "windows-result",
 | 
			
		||||
 "windows-strings",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-implement"
 | 
			
		||||
version = "0.60.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "a47fddd13af08290e67f4acabf4b459f647552718f683a7b415d290ac744a836"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-interface"
 | 
			
		||||
version = "0.59.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "bd9211b69f8dcdfa817bfd14bf1c97c9188afa36f4750130fcdf3f400eca9fa8"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "proc-macro2",
 | 
			
		||||
 "quote",
 | 
			
		||||
 "syn",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
@ -1969,6 +2166,24 @@ version = "0.1.1"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "76840935b766e1b0a05c0066835fb9ec80071d4c09a16f6bd5f7e655e3c14c38"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-result"
 | 
			
		||||
version = "0.3.2"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "c64fd11a4fd95df68efcfee5f44a294fe71b8bc6a91993e2791938abcc712252"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-link",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-strings"
 | 
			
		||||
version = "0.4.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "7a2ba9642430ee452d5a7aa78d72907ebe8cfda358e8cb7918a2050581322f97"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-link",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-sys"
 | 
			
		||||
version = "0.52.0"
 | 
			
		||||
@ -1978,6 +2193,15 @@ dependencies = [
 | 
			
		||||
 "windows-targets",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-sys"
 | 
			
		||||
version = "0.59.0"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "windows-targets",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "windows-targets"
 | 
			
		||||
version = "0.52.6"
 | 
			
		||||
@ -2044,9 +2268,9 @@ checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
 | 
			
		||||
 | 
			
		||||
[[package]]
 | 
			
		||||
name = "winnow"
 | 
			
		||||
version = "0.7.4"
 | 
			
		||||
version = "0.7.6"
 | 
			
		||||
source = "registry+https://github.com/rust-lang/crates.io-index"
 | 
			
		||||
checksum = "0e97b544156e9bebe1a0ffbc03484fc1ffe3100cbce3ffb17eac35f7cdd7ab36"
 | 
			
		||||
checksum = "63d3fcd9bba44b03821e7d699eeee959f3126dcc4aa8e4ae18ec617c2a5cea10"
 | 
			
		||||
dependencies = [
 | 
			
		||||
 "memchr",
 | 
			
		||||
]
 | 
			
		||||
 | 
			
		||||
@ -18,4 +18,6 @@ argon2 = "0.5"
 | 
			
		||||
chrono = { version = "0.4", features = ["serde"] }
 | 
			
		||||
jsonwebtoken = "9.3"
 | 
			
		||||
validator = { version = "0.20", features = ["derive"] }
 | 
			
		||||
rand_core = { version = "0.9" }
 | 
			
		||||
rand_core = { version = "0.9" }
 | 
			
		||||
env_logger = "0.11"
 | 
			
		||||
tracing-actix-web = "0.7"
 | 
			
		||||
							
								
								
									
										233
									
								
								backend-actix/gamenight-api.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										233
									
								
								backend-actix/gamenight-api.yaml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,233 @@
 | 
			
		||||
openapi: 3.0.0
 | 
			
		||||
info:
 | 
			
		||||
  title: Gamenight
 | 
			
		||||
  version: '1.0'
 | 
			
		||||
  contact:
 | 
			
		||||
    name: Dennis Brentjes
 | 
			
		||||
    email: dennis@brentj.es
 | 
			
		||||
    url: 'https://brentj.es'
 | 
			
		||||
  description: Api specifaction for a Gamenight server
 | 
			
		||||
  license:
 | 
			
		||||
    name: MIT
 | 
			
		||||
servers:
 | 
			
		||||
  - url: 'http://localhost:8080'
 | 
			
		||||
    description: Gamenight
 | 
			
		||||
paths:
 | 
			
		||||
  /token:
 | 
			
		||||
    get:
 | 
			
		||||
      summary: ''
 | 
			
		||||
      operationId: get-token
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          $ref: '#/components/responses/TokenResponse'
 | 
			
		||||
        '401':
 | 
			
		||||
          $ref: '#/components/responses/FailureResponse'
 | 
			
		||||
      requestBody:
 | 
			
		||||
        $ref: '#/components/requestBodies/LoginRequest'
 | 
			
		||||
      description: Submit your credentials to get a JWT-token to use with the rest of the api.
 | 
			
		||||
      parameters: []
 | 
			
		||||
  /user:
 | 
			
		||||
    post:
 | 
			
		||||
      summary: ''
 | 
			
		||||
      operationId: post-register
 | 
			
		||||
      requestBody:
 | 
			
		||||
        $ref: '#/components/requestBodies/RegisterRequest'
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: ''
 | 
			
		||||
        '422':
 | 
			
		||||
          $ref: '#/components/responses/FailureResponse'
 | 
			
		||||
      description: 'Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match.'
 | 
			
		||||
    parameters: []
 | 
			
		||||
  /gamenights:
 | 
			
		||||
    get:
 | 
			
		||||
      summary: Your GET endpoint
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          $ref: '#/components/responses/GamenightsResponse'
 | 
			
		||||
        '400':
 | 
			
		||||
          $ref: '#/components/responses/FailureResponse'
 | 
			
		||||
        '401':
 | 
			
		||||
          $ref: '#/components/responses/FailureResponse'
 | 
			
		||||
      operationId: get-gamenights
 | 
			
		||||
      security:
 | 
			
		||||
        - JWT-Auth: []
 | 
			
		||||
      description: Retrieve the list of gamenights on this gamenight server. Requires authorization.
 | 
			
		||||
  /gamenight:
 | 
			
		||||
    post:
 | 
			
		||||
      summary: ''
 | 
			
		||||
      operationId: post-gamenight
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          description: OK
 | 
			
		||||
        '401':
 | 
			
		||||
          $ref: '#/components/responses/FailureResponse'
 | 
			
		||||
        '422':
 | 
			
		||||
          $ref: '#/components/responses/FailureResponse'
 | 
			
		||||
      security:
 | 
			
		||||
        - JWT-Auth: []
 | 
			
		||||
      requestBody:
 | 
			
		||||
        $ref: '#/components/requestBodies/AddGamenight'
 | 
			
		||||
      description: 'Add a gamenight by providing a name and a date, only available when providing an JWT token.'
 | 
			
		||||
    get:
 | 
			
		||||
      summary: ''
 | 
			
		||||
      operationId: get-gamenight
 | 
			
		||||
      responses:
 | 
			
		||||
        '200':
 | 
			
		||||
          $ref: '#/components/responses/GamenightResponse'
 | 
			
		||||
        '401':
 | 
			
		||||
          $ref: '#/components/responses/FailureResponse'
 | 
			
		||||
        '422':
 | 
			
		||||
          $ref: '#/components/responses/FailureResponse'
 | 
			
		||||
      requestBody:
 | 
			
		||||
        $ref: '#/components/requestBodies/GetGamenight'
 | 
			
		||||
      security:
 | 
			
		||||
        - JWT-Auth: []
 | 
			
		||||
components:
 | 
			
		||||
  schemas:
 | 
			
		||||
    Gamenight:
 | 
			
		||||
      title: Gamenight
 | 
			
		||||
      x-stoplight:
 | 
			
		||||
        id: 0nmru75ph5wh3
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        id:
 | 
			
		||||
          type: string
 | 
			
		||||
        name:
 | 
			
		||||
          type: string
 | 
			
		||||
        datetime:
 | 
			
		||||
          type: string
 | 
			
		||||
        owner_id:
 | 
			
		||||
          type: string
 | 
			
		||||
      required:
 | 
			
		||||
        - id
 | 
			
		||||
        - name
 | 
			
		||||
        - datetime
 | 
			
		||||
        - owner_id
 | 
			
		||||
    Failure:
 | 
			
		||||
      title: Failure
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        message:
 | 
			
		||||
          type: string
 | 
			
		||||
      description: ''
 | 
			
		||||
    Token:
 | 
			
		||||
      title: Token
 | 
			
		||||
      x-stoplight:
 | 
			
		||||
        id: 8pz19kigm1jer
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        jwt_token:
 | 
			
		||||
          type: string
 | 
			
		||||
    Login:
 | 
			
		||||
      title: Login
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        username:
 | 
			
		||||
          type: string
 | 
			
		||||
        password:
 | 
			
		||||
          type: string
 | 
			
		||||
      required:
 | 
			
		||||
        - username
 | 
			
		||||
        - password
 | 
			
		||||
    Registration:
 | 
			
		||||
      title: Registration
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        username:
 | 
			
		||||
          type: string
 | 
			
		||||
        email:
 | 
			
		||||
          type: string
 | 
			
		||||
        password:
 | 
			
		||||
          type: string
 | 
			
		||||
        password_repeat:
 | 
			
		||||
          type: string
 | 
			
		||||
        registration_token:
 | 
			
		||||
          type: string
 | 
			
		||||
      required:
 | 
			
		||||
        - username
 | 
			
		||||
        - email
 | 
			
		||||
        - password
 | 
			
		||||
        - password_repeat
 | 
			
		||||
        - registration_token
 | 
			
		||||
    AddGamenightRequestBody:
 | 
			
		||||
      title: AddGamenightRequestBody
 | 
			
		||||
      x-stoplight:
 | 
			
		||||
        id: xw4z5jyym8q7r
 | 
			
		||||
      type: object
 | 
			
		||||
      properties:
 | 
			
		||||
        name:
 | 
			
		||||
          type: string
 | 
			
		||||
          x-stoplight:
 | 
			
		||||
            id: s5ny76cy54nty
 | 
			
		||||
        datetime:
 | 
			
		||||
          type: string
 | 
			
		||||
          x-stoplight:
 | 
			
		||||
            id: dh6vyvulj4xze
 | 
			
		||||
      x-internal: false
 | 
			
		||||
  requestBodies:
 | 
			
		||||
    LoginRequest:
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/components/schemas/Login'
 | 
			
		||||
    RegisterRequest:
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/components/schemas/Registration'
 | 
			
		||||
    AddGamenight:
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/components/schemas/AddGamenightRequestBody'
 | 
			
		||||
    GetGamenight:
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            type: object
 | 
			
		||||
            properties:
 | 
			
		||||
              id:
 | 
			
		||||
                type: string
 | 
			
		||||
  responses:
 | 
			
		||||
    TokenResponse:
 | 
			
		||||
      description: Example response
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/components/schemas/Token'
 | 
			
		||||
    FailureResponse:
 | 
			
		||||
      description: Example response
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/components/schemas/Failure'
 | 
			
		||||
        application/xml:
 | 
			
		||||
          schema:
 | 
			
		||||
            type: object
 | 
			
		||||
            properties:
 | 
			
		||||
              message:
 | 
			
		||||
                type: string
 | 
			
		||||
            required:
 | 
			
		||||
              - message
 | 
			
		||||
    GamenightsResponse:
 | 
			
		||||
      description: Example response
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            type: array
 | 
			
		||||
            items:
 | 
			
		||||
              $ref: '#/components/schemas/Gamenight'
 | 
			
		||||
    GamenightResponse:
 | 
			
		||||
      description: Example response
 | 
			
		||||
      content:
 | 
			
		||||
        application/json:
 | 
			
		||||
          schema:
 | 
			
		||||
            $ref: '#/components/schemas/Gamenight'
 | 
			
		||||
  securitySchemes:
 | 
			
		||||
    JWT-Auth:
 | 
			
		||||
      type: http
 | 
			
		||||
      scheme: bearer
 | 
			
		||||
      bearerFormat: JWT
 | 
			
		||||
      description: ''
 | 
			
		||||
 | 
			
		||||
@ -3,6 +3,7 @@ pub mod schema;
 | 
			
		||||
pub mod util;
 | 
			
		||||
 | 
			
		||||
use actix_cors::Cors;
 | 
			
		||||
use actix_web::middleware::Logger;
 | 
			
		||||
use actix_web::HttpServer;
 | 
			
		||||
use actix_web::App;
 | 
			
		||||
use actix_web::http;
 | 
			
		||||
@ -12,6 +13,7 @@ use diesel::r2d2::{ConnectionManager, Pool};
 | 
			
		||||
use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness};
 | 
			
		||||
use request::{login, register, gamenights, gamenight_post, gamenight_get};
 | 
			
		||||
use util::GetConnection;
 | 
			
		||||
use tracing_actix_web::TracingLogger;
 | 
			
		||||
 | 
			
		||||
pub(crate) type DbPool = Pool<ConnectionManager<PgConnection>>;
 | 
			
		||||
 | 
			
		||||
@ -35,6 +37,8 @@ async fn main() -> std::io::Result<()> {
 | 
			
		||||
    let mut conn = pool.get_conn();
 | 
			
		||||
    run_migration(&mut conn);
 | 
			
		||||
 | 
			
		||||
    env_logger::init_from_env(env_logger::Env::new().default_filter_or("info"));
 | 
			
		||||
 | 
			
		||||
    HttpServer::new(move || {
 | 
			
		||||
        let cors = Cors::default()
 | 
			
		||||
            .allowed_origin("0.0.0.0")
 | 
			
		||||
@ -46,6 +50,8 @@ async fn main() -> std::io::Result<()> {
 | 
			
		||||
 | 
			
		||||
        App::new()
 | 
			
		||||
            .wrap(cors)
 | 
			
		||||
            .wrap(Logger::default())
 | 
			
		||||
            .wrap(TracingLogger::default())
 | 
			
		||||
            .app_data(web::Data::new(pool.clone()))
 | 
			
		||||
            .service(login)
 | 
			
		||||
            .service(register)
 | 
			
		||||
 | 
			
		||||
@ -6,7 +6,7 @@ use crate::schema::{self};
 | 
			
		||||
use crate::schema::user::User;
 | 
			
		||||
use crate::request::requests::GamenightGet;
 | 
			
		||||
use crate::request::requests::GamenightPost;
 | 
			
		||||
use crate::request::responses::GameNightResponse;
 | 
			
		||||
use crate::request::responses::GameNightsResponse;
 | 
			
		||||
use crate::request::error::ApiError;
 | 
			
		||||
use crate::DbPool;
 | 
			
		||||
use crate::util::GetConnection;
 | 
			
		||||
@ -31,11 +31,11 @@ impl Into<Uuid> for GamenightGet {
 | 
			
		||||
#[get("/gamenights")]
 | 
			
		||||
pub async fn gamenights(pool: web::Data<DbPool>, _user: User) -> Result<impl Responder, ApiError> {
 | 
			
		||||
    let mut conn = pool.get_conn();
 | 
			
		||||
    let gamenights = schema::gamenights(&mut conn)?;
 | 
			
		||||
    let gamenights: GameNightsResponse = schema::gamenights(&mut conn)?;
 | 
			
		||||
 | 
			
		||||
    Ok(HttpResponse::Ok()
 | 
			
		||||
        .content_type(ContentType::json())
 | 
			
		||||
        .body(serde_json::to_string(&GameNightResponse { gamenights })?)
 | 
			
		||||
        .body(serde_json::to_string(&gamenights)?)
 | 
			
		||||
    )
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -22,7 +22,4 @@ impl LoginResponse {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Serialize, Deserialize)]
 | 
			
		||||
pub struct GameNightResponse {
 | 
			
		||||
    pub gamenights: Vec::<Gamenight> 
 | 
			
		||||
}
 | 
			
		||||
pub type GameNightsResponse = Vec<Gamenight>;
 | 
			
		||||
@ -1,6 +1,6 @@
 | 
			
		||||
 | 
			
		||||
use actix_web::http::header::ContentType;
 | 
			
		||||
use actix_web::{web, post, HttpResponse, Responder};
 | 
			
		||||
use actix_web::{web, get, post, HttpResponse, Responder};
 | 
			
		||||
use validator::ValidateArgs;
 | 
			
		||||
use crate::DbPool;
 | 
			
		||||
use crate::request::requests::{Login, Register, RegisterContext};
 | 
			
		||||
@ -30,7 +30,7 @@ impl Into<schema::user::Register> for Register {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[post("/token")]
 | 
			
		||||
#[get("/token")]
 | 
			
		||||
pub async fn login(pool: web::Data<DbPool>, login_data: web::Json<Login>) -> Result<impl Responder, ApiError> {
 | 
			
		||||
    let data = login_data.into_inner();
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -46,6 +46,7 @@ diesel::table! {
 | 
			
		||||
diesel::table! {
 | 
			
		||||
    registration_tokens (id) {
 | 
			
		||||
        id -> Uuid,
 | 
			
		||||
        #[max_length = 32]
 | 
			
		||||
        token -> Bpchar,
 | 
			
		||||
        single_use -> Bool,
 | 
			
		||||
        expires -> Nullable<Timestamptz>,
 | 
			
		||||
@ -65,7 +66,9 @@ diesel::table! {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
diesel::joinable!(gamenight -> users (owner_id));
 | 
			
		||||
diesel::joinable!(gamenight_gamelist -> gamenight (gamenight_id));
 | 
			
		||||
diesel::joinable!(gamenight_gamelist -> known_games (game_id));
 | 
			
		||||
diesel::joinable!(gamenight_participants -> gamenight (gamenight_id));
 | 
			
		||||
diesel::joinable!(gamenight_participants -> users (user_id));
 | 
			
		||||
diesel::joinable!(pwd -> users (user_id));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,7 +1,6 @@
 | 
			
		||||
version: '3.8'
 | 
			
		||||
 | 
			
		||||
services:
 | 
			
		||||
 | 
			
		||||
  db:
 | 
			
		||||
    container_name: pg_container
 | 
			
		||||
    image: postgres
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										3
									
								
								gamenight-api-client-rs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								gamenight-api-client-rs/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,3 @@
 | 
			
		||||
/target/
 | 
			
		||||
**/*.rs.bk
 | 
			
		||||
Cargo.lock
 | 
			
		||||
							
								
								
									
										23
									
								
								gamenight-api-client-rs/.openapi-generator-ignore
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										23
									
								
								gamenight-api-client-rs/.openapi-generator-ignore
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,23 @@
 | 
			
		||||
# OpenAPI Generator Ignore
 | 
			
		||||
# Generated by openapi-generator https://github.com/openapitools/openapi-generator
 | 
			
		||||
 | 
			
		||||
# Use this file to prevent files from being overwritten by the generator.
 | 
			
		||||
# The patterns follow closely to .gitignore or .dockerignore.
 | 
			
		||||
 | 
			
		||||
# As an example, the C# client generator defines ApiClient.cs.
 | 
			
		||||
# You can make changes and tell OpenAPI Generator to ignore just this file by uncommenting the following line:
 | 
			
		||||
#ApiClient.cs
 | 
			
		||||
 | 
			
		||||
# You can match any string of characters against a directory, file or extension with a single asterisk (*):
 | 
			
		||||
#foo/*/qux
 | 
			
		||||
# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux
 | 
			
		||||
 | 
			
		||||
# You can recursively match patterns against a directory, file or extension with a double asterisk (**):
 | 
			
		||||
#foo/**/qux
 | 
			
		||||
# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux
 | 
			
		||||
 | 
			
		||||
# You can also negate patterns with an exclamation (!).
 | 
			
		||||
# For example, you can ignore all files in a docs folder with the file extension .md:
 | 
			
		||||
#docs/*.md
 | 
			
		||||
# Then explicitly reverse the ignore rule for a single file:
 | 
			
		||||
#!docs/README.md
 | 
			
		||||
							
								
								
									
										28
									
								
								gamenight-api-client-rs/.openapi-generator/FILES
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								gamenight-api-client-rs/.openapi-generator/FILES
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
			
		||||
.gitignore
 | 
			
		||||
.openapi-generator-ignore
 | 
			
		||||
.travis.yml
 | 
			
		||||
Cargo.toml
 | 
			
		||||
README.md
 | 
			
		||||
docs/AddGamenightRequestBody.md
 | 
			
		||||
docs/DefaultApi.md
 | 
			
		||||
docs/Failure.md
 | 
			
		||||
docs/Gamenight.md
 | 
			
		||||
docs/GetGamenightRequest.md
 | 
			
		||||
docs/GetToken401Response.md
 | 
			
		||||
docs/Login.md
 | 
			
		||||
docs/Registration.md
 | 
			
		||||
docs/Token.md
 | 
			
		||||
git_push.sh
 | 
			
		||||
src/apis/configuration.rs
 | 
			
		||||
src/apis/default_api.rs
 | 
			
		||||
src/apis/mod.rs
 | 
			
		||||
src/lib.rs
 | 
			
		||||
src/models/add_gamenight_request_body.rs
 | 
			
		||||
src/models/failure.rs
 | 
			
		||||
src/models/gamenight.rs
 | 
			
		||||
src/models/get_gamenight_request.rs
 | 
			
		||||
src/models/get_token_401_response.rs
 | 
			
		||||
src/models/login.rs
 | 
			
		||||
src/models/mod.rs
 | 
			
		||||
src/models/registration.rs
 | 
			
		||||
src/models/token.rs
 | 
			
		||||
							
								
								
									
										1
									
								
								gamenight-api-client-rs/.openapi-generator/VERSION
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								gamenight-api-client-rs/.openapi-generator/VERSION
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
7.12.0
 | 
			
		||||
							
								
								
									
										1
									
								
								gamenight-api-client-rs/.travis.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								gamenight-api-client-rs/.travis.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
language: rust
 | 
			
		||||
							
								
								
									
										14
									
								
								gamenight-api-client-rs/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								gamenight-api-client-rs/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "gamenight-api-client-rs"
 | 
			
		||||
version = "1.0.0"
 | 
			
		||||
authors = ["dennis@brentj.es"]
 | 
			
		||||
description = "Api specifaction for a Gamenight server"
 | 
			
		||||
license = "MIT"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
serde = { version = "^1.0", features = ["derive"] }
 | 
			
		||||
serde_json = "^1.0"
 | 
			
		||||
serde_repr = "^0.1"
 | 
			
		||||
url = "^2.5"
 | 
			
		||||
reqwest = { version = "^0.12", features = ["json", "multipart"] }
 | 
			
		||||
							
								
								
									
										58
									
								
								gamenight-api-client-rs/README.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								gamenight-api-client-rs/README.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,58 @@
 | 
			
		||||
# Rust API client for openapi
 | 
			
		||||
 | 
			
		||||
Api specifaction for a Gamenight server
 | 
			
		||||
 | 
			
		||||
For more information, please visit [https://brentj.es](https://brentj.es)
 | 
			
		||||
 | 
			
		||||
## Overview
 | 
			
		||||
 | 
			
		||||
This API client was generated by the [OpenAPI Generator](https://openapi-generator.tech) project.  By using the [openapi-spec](https://openapis.org) from a remote server, you can easily generate an API client.
 | 
			
		||||
 | 
			
		||||
- API version: 1.0
 | 
			
		||||
- Package version: 1.0
 | 
			
		||||
- Generator version: 7.12.0
 | 
			
		||||
- Build package: `org.openapitools.codegen.languages.RustClientCodegen`
 | 
			
		||||
 | 
			
		||||
## Installation
 | 
			
		||||
 | 
			
		||||
Put the package under your project folder in a directory named `openapi` and add the following to `Cargo.toml` under `[dependencies]`:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
openapi = { path = "./openapi" }
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Documentation for API Endpoints
 | 
			
		||||
 | 
			
		||||
All URIs are relative to *http://localhost:8080*
 | 
			
		||||
 | 
			
		||||
Class | Method | HTTP request | Description
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
*DefaultApi* | [**get_gamenight**](docs/DefaultApi.md#get_gamenight) | **GET** /gamenight | 
 | 
			
		||||
*DefaultApi* | [**get_gamenights**](docs/DefaultApi.md#get_gamenights) | **GET** /gamenights | Your GET endpoint
 | 
			
		||||
*DefaultApi* | [**get_token**](docs/DefaultApi.md#get_token) | **GET** /token | 
 | 
			
		||||
*DefaultApi* | [**post_gamenight**](docs/DefaultApi.md#post_gamenight) | **POST** /gamenight | 
 | 
			
		||||
*DefaultApi* | [**post_register**](docs/DefaultApi.md#post_register) | **POST** /user | 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## Documentation For Models
 | 
			
		||||
 | 
			
		||||
 - [AddGamenightRequestBody](docs/AddGamenightRequestBody.md)
 | 
			
		||||
 - [Failure](docs/Failure.md)
 | 
			
		||||
 - [Gamenight](docs/Gamenight.md)
 | 
			
		||||
 - [GetGamenightRequest](docs/GetGamenightRequest.md)
 | 
			
		||||
 - [GetToken401Response](docs/GetToken401Response.md)
 | 
			
		||||
 - [Login](docs/Login.md)
 | 
			
		||||
 - [Registration](docs/Registration.md)
 | 
			
		||||
 - [Token](docs/Token.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
To get access to the crate's generated documentation, use:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
cargo doc --open
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Author
 | 
			
		||||
 | 
			
		||||
dennis@brentj.es
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								gamenight-api-client-rs/docs/AddGamenightRequestBody.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								gamenight-api-client-rs/docs/AddGamenightRequestBody.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
# AddGamenightRequestBody
 | 
			
		||||
 | 
			
		||||
## Properties
 | 
			
		||||
 | 
			
		||||
Name | Type | Description | Notes
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
**name** | Option<**String**> |  | [optional]
 | 
			
		||||
**datetime** | Option<**String**> |  | [optional]
 | 
			
		||||
 | 
			
		||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										158
									
								
								gamenight-api-client-rs/docs/DefaultApi.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										158
									
								
								gamenight-api-client-rs/docs/DefaultApi.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,158 @@
 | 
			
		||||
# \DefaultApi
 | 
			
		||||
 | 
			
		||||
All URIs are relative to *http://localhost:8080*
 | 
			
		||||
 | 
			
		||||
Method | HTTP request | Description
 | 
			
		||||
------------- | ------------- | -------------
 | 
			
		||||
[**get_gamenight**](DefaultApi.md#get_gamenight) | **GET** /gamenight | 
 | 
			
		||||
[**get_gamenights**](DefaultApi.md#get_gamenights) | **GET** /gamenights | Your GET endpoint
 | 
			
		||||
[**get_token**](DefaultApi.md#get_token) | **GET** /token | 
 | 
			
		||||
[**post_gamenight**](DefaultApi.md#post_gamenight) | **POST** /gamenight | 
 | 
			
		||||
[**post_register**](DefaultApi.md#post_register) | **POST** /user | 
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## get_gamenight
 | 
			
		||||
 | 
			
		||||
> models::Gamenight get_gamenight(get_gamenight_request)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
### Parameters
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Name | Type | Description  | Required | Notes
 | 
			
		||||
------------- | ------------- | ------------- | ------------- | -------------
 | 
			
		||||
**get_gamenight_request** | Option<[**GetGamenightRequest**](GetGamenightRequest.md)> |  |  |
 | 
			
		||||
 | 
			
		||||
### Return type
 | 
			
		||||
 | 
			
		||||
[**models::Gamenight**](Gamenight.md)
 | 
			
		||||
 | 
			
		||||
### Authorization
 | 
			
		||||
 | 
			
		||||
[JWT-Auth](../README.md#JWT-Auth)
 | 
			
		||||
 | 
			
		||||
### HTTP request headers
 | 
			
		||||
 | 
			
		||||
- **Content-Type**: application/json
 | 
			
		||||
- **Accept**: application/json, application/xml
 | 
			
		||||
 | 
			
		||||
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## get_gamenights
 | 
			
		||||
 | 
			
		||||
> Vec<models::Gamenight> get_gamenights()
 | 
			
		||||
Your GET endpoint
 | 
			
		||||
 | 
			
		||||
Retrieve the list of gamenights on this gamenight server. Requires authorization.
 | 
			
		||||
 | 
			
		||||
### Parameters
 | 
			
		||||
 | 
			
		||||
This endpoint does not need any parameter.
 | 
			
		||||
 | 
			
		||||
### Return type
 | 
			
		||||
 | 
			
		||||
[**Vec<models::Gamenight>**](Gamenight.md)
 | 
			
		||||
 | 
			
		||||
### Authorization
 | 
			
		||||
 | 
			
		||||
[JWT-Auth](../README.md#JWT-Auth)
 | 
			
		||||
 | 
			
		||||
### HTTP request headers
 | 
			
		||||
 | 
			
		||||
- **Content-Type**: Not defined
 | 
			
		||||
- **Accept**: application/json, application/xml
 | 
			
		||||
 | 
			
		||||
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## get_token
 | 
			
		||||
 | 
			
		||||
> models::Token get_token(login)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Submit your credentials to get a JWT-token to use with the rest of the api.
 | 
			
		||||
 | 
			
		||||
### Parameters
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Name | Type | Description  | Required | Notes
 | 
			
		||||
------------- | ------------- | ------------- | ------------- | -------------
 | 
			
		||||
**login** | Option<[**Login**](Login.md)> |  |  |
 | 
			
		||||
 | 
			
		||||
### Return type
 | 
			
		||||
 | 
			
		||||
[**models::Token**](Token.md)
 | 
			
		||||
 | 
			
		||||
### Authorization
 | 
			
		||||
 | 
			
		||||
No authorization required
 | 
			
		||||
 | 
			
		||||
### HTTP request headers
 | 
			
		||||
 | 
			
		||||
- **Content-Type**: application/json
 | 
			
		||||
- **Accept**: application/json, application/xml
 | 
			
		||||
 | 
			
		||||
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## post_gamenight
 | 
			
		||||
 | 
			
		||||
> post_gamenight(add_gamenight_request_body)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Add a gamenight by providing a name and a date, only available when providing an JWT token.
 | 
			
		||||
 | 
			
		||||
### Parameters
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Name | Type | Description  | Required | Notes
 | 
			
		||||
------------- | ------------- | ------------- | ------------- | -------------
 | 
			
		||||
**add_gamenight_request_body** | Option<[**AddGamenightRequestBody**](AddGamenightRequestBody.md)> |  |  |
 | 
			
		||||
 | 
			
		||||
### Return type
 | 
			
		||||
 | 
			
		||||
 (empty response body)
 | 
			
		||||
 | 
			
		||||
### Authorization
 | 
			
		||||
 | 
			
		||||
[JWT-Auth](../README.md#JWT-Auth)
 | 
			
		||||
 | 
			
		||||
### HTTP request headers
 | 
			
		||||
 | 
			
		||||
- **Content-Type**: application/json
 | 
			
		||||
- **Accept**: application/json, application/xml
 | 
			
		||||
 | 
			
		||||
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
## post_register
 | 
			
		||||
 | 
			
		||||
> post_register(registration)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match.
 | 
			
		||||
 | 
			
		||||
### Parameters
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Name | Type | Description  | Required | Notes
 | 
			
		||||
------------- | ------------- | ------------- | ------------- | -------------
 | 
			
		||||
**registration** | Option<[**Registration**](Registration.md)> |  |  |
 | 
			
		||||
 | 
			
		||||
### Return type
 | 
			
		||||
 | 
			
		||||
 (empty response body)
 | 
			
		||||
 | 
			
		||||
### Authorization
 | 
			
		||||
 | 
			
		||||
No authorization required
 | 
			
		||||
 | 
			
		||||
### HTTP request headers
 | 
			
		||||
 | 
			
		||||
- **Content-Type**: application/json
 | 
			
		||||
- **Accept**: application/json, application/xml
 | 
			
		||||
 | 
			
		||||
[[Back to top]](#) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to Model list]](../README.md#documentation-for-models) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								gamenight-api-client-rs/docs/Failure.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								gamenight-api-client-rs/docs/Failure.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
# Failure
 | 
			
		||||
 | 
			
		||||
## Properties
 | 
			
		||||
 | 
			
		||||
Name | Type | Description | Notes
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
**message** | Option<**String**> |  | [optional]
 | 
			
		||||
 | 
			
		||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										14
									
								
								gamenight-api-client-rs/docs/Gamenight.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								gamenight-api-client-rs/docs/Gamenight.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
# Gamenight
 | 
			
		||||
 | 
			
		||||
## Properties
 | 
			
		||||
 | 
			
		||||
Name | Type | Description | Notes
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
**id** | **String** |  | 
 | 
			
		||||
**name** | **String** |  | 
 | 
			
		||||
**datetime** | **String** |  | 
 | 
			
		||||
**owner_id** | **String** |  | 
 | 
			
		||||
 | 
			
		||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								gamenight-api-client-rs/docs/GetGamenightRequest.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								gamenight-api-client-rs/docs/GetGamenightRequest.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
# GetGamenightRequest
 | 
			
		||||
 | 
			
		||||
## Properties
 | 
			
		||||
 | 
			
		||||
Name | Type | Description | Notes
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
**id** | Option<**String**> |  | [optional]
 | 
			
		||||
 | 
			
		||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								gamenight-api-client-rs/docs/GetToken401Response.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								gamenight-api-client-rs/docs/GetToken401Response.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
# GetToken401Response
 | 
			
		||||
 | 
			
		||||
## Properties
 | 
			
		||||
 | 
			
		||||
Name | Type | Description | Notes
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
**message** | **String** |  | 
 | 
			
		||||
 | 
			
		||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										12
									
								
								gamenight-api-client-rs/docs/Login.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								gamenight-api-client-rs/docs/Login.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,12 @@
 | 
			
		||||
# Login
 | 
			
		||||
 | 
			
		||||
## Properties
 | 
			
		||||
 | 
			
		||||
Name | Type | Description | Notes
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
**username** | **String** |  | 
 | 
			
		||||
**password** | **String** |  | 
 | 
			
		||||
 | 
			
		||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										15
									
								
								gamenight-api-client-rs/docs/Registration.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								gamenight-api-client-rs/docs/Registration.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,15 @@
 | 
			
		||||
# Registration
 | 
			
		||||
 | 
			
		||||
## Properties
 | 
			
		||||
 | 
			
		||||
Name | Type | Description | Notes
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
**username** | **String** |  | 
 | 
			
		||||
**email** | **String** |  | 
 | 
			
		||||
**password** | **String** |  | 
 | 
			
		||||
**password_repeat** | **String** |  | 
 | 
			
		||||
**registration_token** | **String** |  | 
 | 
			
		||||
 | 
			
		||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										11
									
								
								gamenight-api-client-rs/docs/Token.md
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								gamenight-api-client-rs/docs/Token.md
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
# Token
 | 
			
		||||
 | 
			
		||||
## Properties
 | 
			
		||||
 | 
			
		||||
Name | Type | Description | Notes
 | 
			
		||||
------------ | ------------- | ------------- | -------------
 | 
			
		||||
**jwt_token** | Option<**String**> |  | [optional]
 | 
			
		||||
 | 
			
		||||
[[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										57
									
								
								gamenight-api-client-rs/git_push.sh
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								gamenight-api-client-rs/git_push.sh
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,57 @@
 | 
			
		||||
#!/bin/sh
 | 
			
		||||
# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/
 | 
			
		||||
#
 | 
			
		||||
# Usage example: /bin/sh ./git_push.sh wing328 openapi-petstore-perl "minor update" "gitlab.com"
 | 
			
		||||
 | 
			
		||||
git_user_id=$1
 | 
			
		||||
git_repo_id=$2
 | 
			
		||||
release_note=$3
 | 
			
		||||
git_host=$4
 | 
			
		||||
 | 
			
		||||
if [ "$git_host" = "" ]; then
 | 
			
		||||
    git_host="github.com"
 | 
			
		||||
    echo "[INFO] No command line input provided. Set \$git_host to $git_host"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "$git_user_id" = "" ]; then
 | 
			
		||||
    git_user_id="GIT_USER_ID"
 | 
			
		||||
    echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "$git_repo_id" = "" ]; then
 | 
			
		||||
    git_repo_id="GIT_REPO_ID"
 | 
			
		||||
    echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
if [ "$release_note" = "" ]; then
 | 
			
		||||
    release_note="Minor update"
 | 
			
		||||
    echo "[INFO] No command line input provided. Set \$release_note to $release_note"
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
# Initialize the local directory as a Git repository
 | 
			
		||||
git init
 | 
			
		||||
 | 
			
		||||
# Adds the files in the local repository and stages them for commit.
 | 
			
		||||
git add .
 | 
			
		||||
 | 
			
		||||
# Commits the tracked changes and prepares them to be pushed to a remote repository.
 | 
			
		||||
git commit -m "$release_note"
 | 
			
		||||
 | 
			
		||||
# Sets the new remote
 | 
			
		||||
git_remote=$(git remote)
 | 
			
		||||
if [ "$git_remote" = "" ]; then # git remote not defined
 | 
			
		||||
 | 
			
		||||
    if [ "$GIT_TOKEN" = "" ]; then
 | 
			
		||||
        echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment."
 | 
			
		||||
        git remote add origin https://${git_host}/${git_user_id}/${git_repo_id}.git
 | 
			
		||||
    else
 | 
			
		||||
        git remote add origin https://${git_user_id}:"${GIT_TOKEN}"@${git_host}/${git_user_id}/${git_repo_id}.git
 | 
			
		||||
    fi
 | 
			
		||||
 | 
			
		||||
fi
 | 
			
		||||
 | 
			
		||||
git pull origin master
 | 
			
		||||
 | 
			
		||||
# Pushes (Forces) the changes in the local repository up to the remote repository
 | 
			
		||||
echo "Git pushing to https://${git_host}/${git_user_id}/${git_repo_id}.git"
 | 
			
		||||
git push origin master 2>&1 | grep -v 'To https'
 | 
			
		||||
							
								
								
									
										51
									
								
								gamenight-api-client-rs/src/apis/configuration.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										51
									
								
								gamenight-api-client-rs/src/apis/configuration.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,51 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
pub struct Configuration {
 | 
			
		||||
    pub base_path: String,
 | 
			
		||||
    pub user_agent: Option<String>,
 | 
			
		||||
    pub client: reqwest::Client,
 | 
			
		||||
    pub basic_auth: Option<BasicAuth>,
 | 
			
		||||
    pub oauth_access_token: Option<String>,
 | 
			
		||||
    pub bearer_access_token: Option<String>,
 | 
			
		||||
    pub api_key: Option<ApiKey>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub type BasicAuth = (String, Option<String>);
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
pub struct ApiKey {
 | 
			
		||||
    pub prefix: Option<String>,
 | 
			
		||||
    pub key: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
impl Configuration {
 | 
			
		||||
    pub fn new() -> Configuration {
 | 
			
		||||
        Configuration::default()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Default for Configuration {
 | 
			
		||||
    fn default() -> Self {
 | 
			
		||||
        Configuration {
 | 
			
		||||
            base_path: "http://localhost:8080".to_owned(),
 | 
			
		||||
            user_agent: Some("OpenAPI-Generator/1.0/rust".to_owned()),
 | 
			
		||||
            client: reqwest::Client::new(),
 | 
			
		||||
            basic_auth: None,
 | 
			
		||||
            oauth_access_token: None,
 | 
			
		||||
            bearer_access_token: None,
 | 
			
		||||
            api_key: None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										234
									
								
								gamenight-api-client-rs/src/apis/default_api.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										234
									
								
								gamenight-api-client-rs/src/apis/default_api.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,234 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
use reqwest;
 | 
			
		||||
use serde::{Deserialize, Serialize, de::Error as _};
 | 
			
		||||
use crate::{apis::ResponseContent, models};
 | 
			
		||||
use super::{Error, configuration, ContentType};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/// struct for typed errors of method [`get_gamenight`]
 | 
			
		||||
#[derive(Debug, Clone, Serialize, Deserialize)]
 | 
			
		||||
#[serde(untagged)]
 | 
			
		||||
pub enum GetGamenightError {
 | 
			
		||||
    Status401(models::Failure),
 | 
			
		||||
    Status422(models::Failure),
 | 
			
		||||
    UnknownValue(serde_json::Value),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// struct for typed errors of method [`get_gamenights`]
 | 
			
		||||
#[derive(Debug, Clone, Serialize, Deserialize)]
 | 
			
		||||
#[serde(untagged)]
 | 
			
		||||
pub enum GetGamenightsError {
 | 
			
		||||
    Status400(models::Failure),
 | 
			
		||||
    Status401(models::Failure),
 | 
			
		||||
    UnknownValue(serde_json::Value),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// struct for typed errors of method [`get_token`]
 | 
			
		||||
#[derive(Debug, Clone, Serialize, Deserialize)]
 | 
			
		||||
#[serde(untagged)]
 | 
			
		||||
pub enum GetTokenError {
 | 
			
		||||
    Status401(models::Failure),
 | 
			
		||||
    UnknownValue(serde_json::Value),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// struct for typed errors of method [`post_gamenight`]
 | 
			
		||||
#[derive(Debug, Clone, Serialize, Deserialize)]
 | 
			
		||||
#[serde(untagged)]
 | 
			
		||||
pub enum PostGamenightError {
 | 
			
		||||
    Status401(models::Failure),
 | 
			
		||||
    Status422(models::Failure),
 | 
			
		||||
    UnknownValue(serde_json::Value),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// struct for typed errors of method [`post_register`]
 | 
			
		||||
#[derive(Debug, Clone, Serialize, Deserialize)]
 | 
			
		||||
#[serde(untagged)]
 | 
			
		||||
pub enum PostRegisterError {
 | 
			
		||||
    Status422(models::Failure),
 | 
			
		||||
    UnknownValue(serde_json::Value),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pub async fn get_gamenight(configuration: &configuration::Configuration, get_gamenight_request: Option<models::GetGamenightRequest>) -> Result<models::Gamenight, Error<GetGamenightError>> {
 | 
			
		||||
    // add a prefix to parameters to efficiently prevent name collisions
 | 
			
		||||
    let p_get_gamenight_request = get_gamenight_request;
 | 
			
		||||
 | 
			
		||||
    let uri_str = format!("{}/gamenight", configuration.base_path);
 | 
			
		||||
    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 | 
			
		||||
 | 
			
		||||
    if let Some(ref user_agent) = configuration.user_agent {
 | 
			
		||||
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
 | 
			
		||||
    }
 | 
			
		||||
    if let Some(ref token) = configuration.bearer_access_token {
 | 
			
		||||
        req_builder = req_builder.bearer_auth(token.to_owned());
 | 
			
		||||
    };
 | 
			
		||||
    req_builder = req_builder.json(&p_get_gamenight_request);
 | 
			
		||||
 | 
			
		||||
    let req = req_builder.build()?;
 | 
			
		||||
    let resp = configuration.client.execute(req).await?;
 | 
			
		||||
 | 
			
		||||
    let status = resp.status();
 | 
			
		||||
    let content_type = resp
 | 
			
		||||
        .headers()
 | 
			
		||||
        .get("content-type")
 | 
			
		||||
        .and_then(|v| v.to_str().ok())
 | 
			
		||||
        .unwrap_or("application/octet-stream");
 | 
			
		||||
    let content_type = super::ContentType::from(content_type);
 | 
			
		||||
 | 
			
		||||
    if !status.is_client_error() && !status.is_server_error() {
 | 
			
		||||
        let content = resp.text().await?;
 | 
			
		||||
        match content_type {
 | 
			
		||||
            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
 | 
			
		||||
            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Gamenight`"))),
 | 
			
		||||
            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Gamenight`")))),
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        let content = resp.text().await?;
 | 
			
		||||
        let entity: Option<GetGamenightError> = serde_json::from_str(&content).ok();
 | 
			
		||||
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Retrieve the list of gamenights on this gamenight server. Requires authorization.
 | 
			
		||||
pub async fn get_gamenights(configuration: &configuration::Configuration, ) -> Result<Vec<models::Gamenight>, Error<GetGamenightsError>> {
 | 
			
		||||
 | 
			
		||||
    let uri_str = format!("{}/gamenights", configuration.base_path);
 | 
			
		||||
    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 | 
			
		||||
 | 
			
		||||
    if let Some(ref user_agent) = configuration.user_agent {
 | 
			
		||||
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
 | 
			
		||||
    }
 | 
			
		||||
    if let Some(ref token) = configuration.bearer_access_token {
 | 
			
		||||
        req_builder = req_builder.bearer_auth(token.to_owned());
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    let req = req_builder.build()?;
 | 
			
		||||
    let resp = configuration.client.execute(req).await?;
 | 
			
		||||
 | 
			
		||||
    let status = resp.status();
 | 
			
		||||
    let content_type = resp
 | 
			
		||||
        .headers()
 | 
			
		||||
        .get("content-type")
 | 
			
		||||
        .and_then(|v| v.to_str().ok())
 | 
			
		||||
        .unwrap_or("application/octet-stream");
 | 
			
		||||
    let content_type = super::ContentType::from(content_type);
 | 
			
		||||
 | 
			
		||||
    if !status.is_client_error() && !status.is_server_error() {
 | 
			
		||||
        let content = resp.text().await?;
 | 
			
		||||
        match content_type {
 | 
			
		||||
            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
 | 
			
		||||
            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `Vec<models::Gamenight>`"))),
 | 
			
		||||
            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `Vec<models::Gamenight>`")))),
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        let content = resp.text().await?;
 | 
			
		||||
        let entity: Option<GetGamenightsError> = serde_json::from_str(&content).ok();
 | 
			
		||||
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Submit your credentials to get a JWT-token to use with the rest of the api.
 | 
			
		||||
pub async fn get_token(configuration: &configuration::Configuration, login: Option<models::Login>) -> Result<models::Token, Error<GetTokenError>> {
 | 
			
		||||
    // add a prefix to parameters to efficiently prevent name collisions
 | 
			
		||||
    let p_login = login;
 | 
			
		||||
 | 
			
		||||
    let uri_str = format!("{}/token", configuration.base_path);
 | 
			
		||||
    let mut req_builder = configuration.client.request(reqwest::Method::GET, &uri_str);
 | 
			
		||||
 | 
			
		||||
    if let Some(ref user_agent) = configuration.user_agent {
 | 
			
		||||
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
 | 
			
		||||
    }
 | 
			
		||||
    req_builder = req_builder.json(&p_login);
 | 
			
		||||
 | 
			
		||||
    let req = req_builder.build()?;
 | 
			
		||||
    let resp = configuration.client.execute(req).await?;
 | 
			
		||||
 | 
			
		||||
    let status = resp.status();
 | 
			
		||||
    let content_type = resp
 | 
			
		||||
        .headers()
 | 
			
		||||
        .get("content-type")
 | 
			
		||||
        .and_then(|v| v.to_str().ok())
 | 
			
		||||
        .unwrap_or("application/octet-stream");
 | 
			
		||||
    let content_type = super::ContentType::from(content_type);
 | 
			
		||||
 | 
			
		||||
    if !status.is_client_error() && !status.is_server_error() {
 | 
			
		||||
        let content = resp.text().await?;
 | 
			
		||||
        match content_type {
 | 
			
		||||
            ContentType::Json => serde_json::from_str(&content).map_err(Error::from),
 | 
			
		||||
            ContentType::Text => return Err(Error::from(serde_json::Error::custom("Received `text/plain` content type response that cannot be converted to `models::Token`"))),
 | 
			
		||||
            ContentType::Unsupported(unknown_type) => return Err(Error::from(serde_json::Error::custom(format!("Received `{unknown_type}` content type response that cannot be converted to `models::Token`")))),
 | 
			
		||||
        }
 | 
			
		||||
    } else {
 | 
			
		||||
        let content = resp.text().await?;
 | 
			
		||||
        let entity: Option<GetTokenError> = serde_json::from_str(&content).ok();
 | 
			
		||||
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Add a gamenight by providing a name and a date, only available when providing an JWT token.
 | 
			
		||||
pub async fn post_gamenight(configuration: &configuration::Configuration, add_gamenight_request_body: Option<models::AddGamenightRequestBody>) -> Result<(), Error<PostGamenightError>> {
 | 
			
		||||
    // add a prefix to parameters to efficiently prevent name collisions
 | 
			
		||||
    let p_add_gamenight_request_body = add_gamenight_request_body;
 | 
			
		||||
 | 
			
		||||
    let uri_str = format!("{}/gamenight", configuration.base_path);
 | 
			
		||||
    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 | 
			
		||||
 | 
			
		||||
    if let Some(ref user_agent) = configuration.user_agent {
 | 
			
		||||
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
 | 
			
		||||
    }
 | 
			
		||||
    if let Some(ref token) = configuration.bearer_access_token {
 | 
			
		||||
        req_builder = req_builder.bearer_auth(token.to_owned());
 | 
			
		||||
    };
 | 
			
		||||
    req_builder = req_builder.json(&p_add_gamenight_request_body);
 | 
			
		||||
 | 
			
		||||
    let req = req_builder.build()?;
 | 
			
		||||
    let resp = configuration.client.execute(req).await?;
 | 
			
		||||
 | 
			
		||||
    let status = resp.status();
 | 
			
		||||
 | 
			
		||||
    if !status.is_client_error() && !status.is_server_error() {
 | 
			
		||||
        Ok(())
 | 
			
		||||
    } else {
 | 
			
		||||
        let content = resp.text().await?;
 | 
			
		||||
        let entity: Option<PostGamenightError> = serde_json::from_str(&content).ok();
 | 
			
		||||
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Create a new user given a registration token and user information, username and email must be unique, and password and password_repeat must match.
 | 
			
		||||
pub async fn post_register(configuration: &configuration::Configuration, registration: Option<models::Registration>) -> Result<(), Error<PostRegisterError>> {
 | 
			
		||||
    // add a prefix to parameters to efficiently prevent name collisions
 | 
			
		||||
    let p_registration = registration;
 | 
			
		||||
 | 
			
		||||
    let uri_str = format!("{}/user", configuration.base_path);
 | 
			
		||||
    let mut req_builder = configuration.client.request(reqwest::Method::POST, &uri_str);
 | 
			
		||||
 | 
			
		||||
    if let Some(ref user_agent) = configuration.user_agent {
 | 
			
		||||
        req_builder = req_builder.header(reqwest::header::USER_AGENT, user_agent.clone());
 | 
			
		||||
    }
 | 
			
		||||
    req_builder = req_builder.json(&p_registration);
 | 
			
		||||
 | 
			
		||||
    let req = req_builder.build()?;
 | 
			
		||||
    let resp = configuration.client.execute(req).await?;
 | 
			
		||||
 | 
			
		||||
    let status = resp.status();
 | 
			
		||||
 | 
			
		||||
    if !status.is_client_error() && !status.is_server_error() {
 | 
			
		||||
        Ok(())
 | 
			
		||||
    } else {
 | 
			
		||||
        let content = resp.text().await?;
 | 
			
		||||
        let entity: Option<PostRegisterError> = serde_json::from_str(&content).ok();
 | 
			
		||||
        Err(Error::ResponseError(ResponseContent { status, content, entity }))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										116
									
								
								gamenight-api-client-rs/src/apis/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										116
									
								
								gamenight-api-client-rs/src/apis/mod.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,116 @@
 | 
			
		||||
use std::error;
 | 
			
		||||
use std::fmt;
 | 
			
		||||
 | 
			
		||||
#[derive(Debug, Clone)]
 | 
			
		||||
pub struct ResponseContent<T> {
 | 
			
		||||
    pub status: reqwest::StatusCode,
 | 
			
		||||
    pub content: String,
 | 
			
		||||
    pub entity: Option<T>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
pub enum Error<T> {
 | 
			
		||||
    Reqwest(reqwest::Error),
 | 
			
		||||
    Serde(serde_json::Error),
 | 
			
		||||
    Io(std::io::Error),
 | 
			
		||||
    ResponseError(ResponseContent<T>),
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl <T> fmt::Display for Error<T> {
 | 
			
		||||
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
 | 
			
		||||
        let (module, e) = match self {
 | 
			
		||||
            Error::Reqwest(e) => ("reqwest", e.to_string()),
 | 
			
		||||
            Error::Serde(e) => ("serde", e.to_string()),
 | 
			
		||||
            Error::Io(e) => ("IO", e.to_string()),
 | 
			
		||||
            Error::ResponseError(e) => ("response", format!("status code {}", e.status)),
 | 
			
		||||
        };
 | 
			
		||||
        write!(f, "error in {}: {}", module, e)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl <T: fmt::Debug> error::Error for Error<T> {
 | 
			
		||||
    fn source(&self) -> Option<&(dyn error::Error + 'static)> {
 | 
			
		||||
        Some(match self {
 | 
			
		||||
            Error::Reqwest(e) => e,
 | 
			
		||||
            Error::Serde(e) => e,
 | 
			
		||||
            Error::Io(e) => e,
 | 
			
		||||
            Error::ResponseError(_) => return None,
 | 
			
		||||
        })
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl <T> From<reqwest::Error> for Error<T> {
 | 
			
		||||
    fn from(e: reqwest::Error) -> Self {
 | 
			
		||||
        Error::Reqwest(e)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl <T> From<serde_json::Error> for Error<T> {
 | 
			
		||||
    fn from(e: serde_json::Error) -> Self {
 | 
			
		||||
        Error::Serde(e)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl <T> From<std::io::Error> for Error<T> {
 | 
			
		||||
    fn from(e: std::io::Error) -> Self {
 | 
			
		||||
        Error::Io(e)
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn urlencode<T: AsRef<str>>(s: T) -> String {
 | 
			
		||||
    ::url::form_urlencoded::byte_serialize(s.as_ref().as_bytes()).collect()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub fn parse_deep_object(prefix: &str, value: &serde_json::Value) -> Vec<(String, String)> {
 | 
			
		||||
    if let serde_json::Value::Object(object) = value {
 | 
			
		||||
        let mut params = vec![];
 | 
			
		||||
 | 
			
		||||
        for (key, value) in object {
 | 
			
		||||
            match value {
 | 
			
		||||
                serde_json::Value::Object(_) => params.append(&mut parse_deep_object(
 | 
			
		||||
                    &format!("{}[{}]", prefix, key),
 | 
			
		||||
                    value,
 | 
			
		||||
                )),
 | 
			
		||||
                serde_json::Value::Array(array) => {
 | 
			
		||||
                    for (i, value) in array.iter().enumerate() {
 | 
			
		||||
                        params.append(&mut parse_deep_object(
 | 
			
		||||
                            &format!("{}[{}][{}]", prefix, key, i),
 | 
			
		||||
                            value,
 | 
			
		||||
                        ));
 | 
			
		||||
                    }
 | 
			
		||||
                },
 | 
			
		||||
                serde_json::Value::String(s) => params.push((format!("{}[{}]", prefix, key), s.clone())),
 | 
			
		||||
                _ => params.push((format!("{}[{}]", prefix, key), value.to_string())),
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return params;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    unimplemented!("Only objects are supported with style=deepObject")
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/// Internal use only
 | 
			
		||||
/// A content type supported by this client.
 | 
			
		||||
#[allow(dead_code)]
 | 
			
		||||
enum ContentType {
 | 
			
		||||
    Json,
 | 
			
		||||
    Text,
 | 
			
		||||
    Unsupported(String)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<&str> for ContentType {
 | 
			
		||||
    fn from(content_type: &str) -> Self {
 | 
			
		||||
        if content_type.starts_with("application") && content_type.contains("json") {
 | 
			
		||||
            return Self::Json;
 | 
			
		||||
        } else if content_type.starts_with("text/plain") {
 | 
			
		||||
            return Self::Text;
 | 
			
		||||
        } else {
 | 
			
		||||
            return Self::Unsupported(content_type.to_string());
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub mod default_api;
 | 
			
		||||
 | 
			
		||||
pub mod configuration;
 | 
			
		||||
							
								
								
									
										11
									
								
								gamenight-api-client-rs/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								gamenight-api-client-rs/src/lib.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,11 @@
 | 
			
		||||
#![allow(unused_imports)]
 | 
			
		||||
#![allow(clippy::too_many_arguments)]
 | 
			
		||||
 | 
			
		||||
extern crate serde_repr;
 | 
			
		||||
extern crate serde;
 | 
			
		||||
extern crate serde_json;
 | 
			
		||||
extern crate url;
 | 
			
		||||
extern crate reqwest;
 | 
			
		||||
 | 
			
		||||
pub mod apis;
 | 
			
		||||
pub mod models;
 | 
			
		||||
@ -0,0 +1,30 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use crate::models;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct AddGamenightRequestBody {
 | 
			
		||||
    #[serde(rename = "name", skip_serializing_if = "Option::is_none")]
 | 
			
		||||
    pub name: Option<String>,
 | 
			
		||||
    #[serde(rename = "datetime", skip_serializing_if = "Option::is_none")]
 | 
			
		||||
    pub datetime: Option<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl AddGamenightRequestBody {
 | 
			
		||||
    pub fn new() -> AddGamenightRequestBody {
 | 
			
		||||
        AddGamenightRequestBody {
 | 
			
		||||
            name: None,
 | 
			
		||||
            datetime: None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										29
									
								
								gamenight-api-client-rs/src/models/failure.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										29
									
								
								gamenight-api-client-rs/src/models/failure.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,29 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use crate::models;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
/// Failure : 
 | 
			
		||||
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct Failure {
 | 
			
		||||
    #[serde(rename = "message", skip_serializing_if = "Option::is_none")]
 | 
			
		||||
    pub message: Option<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Failure {
 | 
			
		||||
    /// 
 | 
			
		||||
    pub fn new() -> Failure {
 | 
			
		||||
        Failure {
 | 
			
		||||
            message: None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										36
									
								
								gamenight-api-client-rs/src/models/gamenight.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								gamenight-api-client-rs/src/models/gamenight.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,36 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use crate::models;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct Gamenight {
 | 
			
		||||
    #[serde(rename = "id")]
 | 
			
		||||
    pub id: String,
 | 
			
		||||
    #[serde(rename = "name")]
 | 
			
		||||
    pub name: String,
 | 
			
		||||
    #[serde(rename = "datetime")]
 | 
			
		||||
    pub datetime: String,
 | 
			
		||||
    #[serde(rename = "owner_id")]
 | 
			
		||||
    pub owner_id: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Gamenight {
 | 
			
		||||
    pub fn new(id: String, name: String, datetime: String, owner_id: String) -> Gamenight {
 | 
			
		||||
        Gamenight {
 | 
			
		||||
            id,
 | 
			
		||||
            name,
 | 
			
		||||
            datetime,
 | 
			
		||||
            owner_id,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								gamenight-api-client-rs/src/models/get_gamenight_request.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								gamenight-api-client-rs/src/models/get_gamenight_request.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use crate::models;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct GetGamenightRequest {
 | 
			
		||||
    #[serde(rename = "id", skip_serializing_if = "Option::is_none")]
 | 
			
		||||
    pub id: Option<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl GetGamenightRequest {
 | 
			
		||||
    pub fn new() -> GetGamenightRequest {
 | 
			
		||||
        GetGamenightRequest {
 | 
			
		||||
            id: None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								gamenight-api-client-rs/src/models/get_token_401_response.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								gamenight-api-client-rs/src/models/get_token_401_response.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use crate::models;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct GetToken401Response {
 | 
			
		||||
    #[serde(rename = "message")]
 | 
			
		||||
    pub message: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl GetToken401Response {
 | 
			
		||||
    pub fn new(message: String) -> GetToken401Response {
 | 
			
		||||
        GetToken401Response {
 | 
			
		||||
            message,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										30
									
								
								gamenight-api-client-rs/src/models/login.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								gamenight-api-client-rs/src/models/login.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use crate::models;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct Login {
 | 
			
		||||
    #[serde(rename = "username")]
 | 
			
		||||
    pub username: String,
 | 
			
		||||
    #[serde(rename = "password")]
 | 
			
		||||
    pub password: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Login {
 | 
			
		||||
    pub fn new(username: String, password: String) -> Login {
 | 
			
		||||
        Login {
 | 
			
		||||
            username,
 | 
			
		||||
            password,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										16
									
								
								gamenight-api-client-rs/src/models/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								gamenight-api-client-rs/src/models/mod.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,16 @@
 | 
			
		||||
pub mod add_gamenight_request_body;
 | 
			
		||||
pub use self::add_gamenight_request_body::AddGamenightRequestBody;
 | 
			
		||||
pub mod failure;
 | 
			
		||||
pub use self::failure::Failure;
 | 
			
		||||
pub mod gamenight;
 | 
			
		||||
pub use self::gamenight::Gamenight;
 | 
			
		||||
pub mod get_gamenight_request;
 | 
			
		||||
pub use self::get_gamenight_request::GetGamenightRequest;
 | 
			
		||||
pub mod get_token_401_response;
 | 
			
		||||
pub use self::get_token_401_response::GetToken401Response;
 | 
			
		||||
pub mod login;
 | 
			
		||||
pub use self::login::Login;
 | 
			
		||||
pub mod registration;
 | 
			
		||||
pub use self::registration::Registration;
 | 
			
		||||
pub mod token;
 | 
			
		||||
pub use self::token::Token;
 | 
			
		||||
							
								
								
									
										39
									
								
								gamenight-api-client-rs/src/models/registration.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										39
									
								
								gamenight-api-client-rs/src/models/registration.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,39 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use crate::models;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct Registration {
 | 
			
		||||
    #[serde(rename = "username")]
 | 
			
		||||
    pub username: String,
 | 
			
		||||
    #[serde(rename = "email")]
 | 
			
		||||
    pub email: String,
 | 
			
		||||
    #[serde(rename = "password")]
 | 
			
		||||
    pub password: String,
 | 
			
		||||
    #[serde(rename = "password_repeat")]
 | 
			
		||||
    pub password_repeat: String,
 | 
			
		||||
    #[serde(rename = "registration_token")]
 | 
			
		||||
    pub registration_token: String,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Registration {
 | 
			
		||||
    pub fn new(username: String, email: String, password: String, password_repeat: String, registration_token: String) -> Registration {
 | 
			
		||||
        Registration {
 | 
			
		||||
            username,
 | 
			
		||||
            email,
 | 
			
		||||
            password,
 | 
			
		||||
            password_repeat,
 | 
			
		||||
            registration_token,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										27
									
								
								gamenight-api-client-rs/src/models/token.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										27
									
								
								gamenight-api-client-rs/src/models/token.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,27 @@
 | 
			
		||||
/*
 | 
			
		||||
 * Gamenight
 | 
			
		||||
 *
 | 
			
		||||
 * Api specifaction for a Gamenight server
 | 
			
		||||
 *
 | 
			
		||||
 * The version of the OpenAPI document: 1.0
 | 
			
		||||
 * Contact: dennis@brentj.es
 | 
			
		||||
 * Generated by: https://openapi-generator.tech
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use crate::models;
 | 
			
		||||
use serde::{Deserialize, Serialize};
 | 
			
		||||
 | 
			
		||||
#[derive(Clone, Default, Debug, PartialEq, Serialize, Deserialize)]
 | 
			
		||||
pub struct Token {
 | 
			
		||||
    #[serde(rename = "jwt_token", skip_serializing_if = "Option::is_none")]
 | 
			
		||||
    pub jwt_token: Option<String>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Token {
 | 
			
		||||
    pub fn new() -> Token {
 | 
			
		||||
        Token {
 | 
			
		||||
            jwt_token: None,
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										1
									
								
								gamenight-cli/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								gamenight-cli/.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
target
 | 
			
		||||
							
								
								
									
										1933
									
								
								gamenight-cli/Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										1933
									
								
								gamenight-cli/Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										10
									
								
								gamenight-cli/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								gamenight-cli/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,10 @@
 | 
			
		||||
[package]
 | 
			
		||||
name = "gamenight-cli"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
edition = "2024"
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
gamenight-api-client-rs = { path = "../gamenight-api-client-rs" }
 | 
			
		||||
tokio = { version = "1", features = ["full"] }
 | 
			
		||||
inquire = "0.7.5"
 | 
			
		||||
async-trait = "0.1" 
 | 
			
		||||
							
								
								
									
										24
									
								
								gamenight-cli/src/flows/abort.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								gamenight-cli/src/flows/abort.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
			
		||||
use super::*;
 | 
			
		||||
 | 
			
		||||
pub struct Abort {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Abort {
 | 
			
		||||
    pub fn new() -> Self {
 | 
			
		||||
        Self{}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[async_trait]
 | 
			
		||||
impl<'a> Flow<'a> for Abort {
 | 
			
		||||
    async fn run(&self, state: &'a mut GamenightState) -> FlowResult<'a> {
 | 
			
		||||
        Ok((FlowOutcome::Abort, state))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Display for Abort {
 | 
			
		||||
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 | 
			
		||||
        write!(f, "Abort")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										30
									
								
								gamenight-cli/src/flows/list_gamenights.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										30
									
								
								gamenight-cli/src/flows/list_gamenights.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,30 @@
 | 
			
		||||
 | 
			
		||||
use gamenight_api_client_rs::apis::default_api::get_gamenights;
 | 
			
		||||
 | 
			
		||||
use super::*;
 | 
			
		||||
 | 
			
		||||
pub struct ListGamenights {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl ListGamenights {
 | 
			
		||||
    pub fn new() -> Self {
 | 
			
		||||
        Self {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[async_trait]
 | 
			
		||||
impl<'a> Flow<'a> for ListGamenights {
 | 
			
		||||
    async fn run(&self, state: &'a mut GamenightState) -> FlowResult<'a> {
 | 
			
		||||
        let response = get_gamenights(&state.configuration).await?;
 | 
			
		||||
        println!("{:?}", response);
 | 
			
		||||
        Ok((FlowOutcome::Successful, state))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Display for ListGamenights {
 | 
			
		||||
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 | 
			
		||||
        write!(f, "List all gamenights")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
							
								
								
									
										43
									
								
								gamenight-cli/src/flows/login.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										43
									
								
								gamenight-cli/src/flows/login.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,43 @@
 | 
			
		||||
use async_trait::async_trait;
 | 
			
		||||
use gamenight_api_client_rs::{apis::{configuration::Configuration, default_api::get_token}, models};
 | 
			
		||||
use inquire::{Password, Text};
 | 
			
		||||
 | 
			
		||||
use super::*;
 | 
			
		||||
 | 
			
		||||
pub struct Login {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Login {
 | 
			
		||||
    pub fn new() -> Self {
 | 
			
		||||
        Self {}
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[async_trait]
 | 
			
		||||
impl<'a> Flow<'a> for Login {
 | 
			
		||||
    async fn run(&self, state: &'a mut GamenightState) -> FlowResult<'a> {
 | 
			
		||||
        let configuration = Configuration::new();
 | 
			
		||||
 | 
			
		||||
        let username = Text::new("What is your login?").prompt()?;
 | 
			
		||||
        let password = Password::new("what is your password?")
 | 
			
		||||
            .without_confirmation()
 | 
			
		||||
            .prompt()?;
 | 
			
		||||
   
 | 
			
		||||
        let login = models::Login::new(username, password);
 | 
			
		||||
   
 | 
			
		||||
        let result = get_token(&configuration, Some(login)).await?;
 | 
			
		||||
        if let Some(token) = result.jwt_token {
 | 
			
		||||
            state.configuration.bearer_access_token = Some(token);
 | 
			
		||||
            Ok((FlowOutcome::Successful, state))
 | 
			
		||||
        } else {
 | 
			
		||||
            Err(FlowError{error: "Unexpected response".to_string()})
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Display for Login {
 | 
			
		||||
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 | 
			
		||||
        write!(f, "Login")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										35
									
								
								gamenight-cli/src/flows/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										35
									
								
								gamenight-cli/src/flows/main.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,35 @@
 | 
			
		||||
 | 
			
		||||
use super::{abort::Abort, list_gamenights::ListGamenights, login::Login, main_menu::MainMenu, *};
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
pub struct Main {
 | 
			
		||||
    login: Box<dyn for<'a> Flow<'a>>,
 | 
			
		||||
    main_menu: MainMenu
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Main {
 | 
			
		||||
    pub fn new() -> Self {
 | 
			
		||||
        let mut main_menu = MainMenu::new();
 | 
			
		||||
        main_menu.menu.push(Box::new(ListGamenights::new()));
 | 
			
		||||
        main_menu.menu.push(Box::new(Abort::new()));
 | 
			
		||||
        Self {
 | 
			
		||||
            login: Box::new(Login::new()),
 | 
			
		||||
            main_menu: main_menu
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[async_trait]
 | 
			
		||||
impl<'a> Flow<'a> for Main {
 | 
			
		||||
    async fn run(&self, state: &'a mut GamenightState) -> FlowResult<'a> {
 | 
			
		||||
        let (_outcome, state) = self.login.run(state).await?;
 | 
			
		||||
        let (_outcome, state) = self.main_menu.run(state).await?;
 | 
			
		||||
        Ok((FlowOutcome::Successful, state))
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Display for Main {
 | 
			
		||||
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 | 
			
		||||
        write!(f, "main")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										53
									
								
								gamenight-cli/src/flows/main_menu.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										53
									
								
								gamenight-cli/src/flows/main_menu.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,53 @@
 | 
			
		||||
 | 
			
		||||
use inquire::{ui::RenderConfig, Select};
 | 
			
		||||
 | 
			
		||||
use super::*;
 | 
			
		||||
 | 
			
		||||
pub struct MainMenu {
 | 
			
		||||
    pub menu: Vec<Box<dyn for<'a> Flow<'a> + Send>>
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl MainMenu {
 | 
			
		||||
    pub fn new() -> Self {
 | 
			
		||||
        MainMenu { 
 | 
			
		||||
            menu: vec![]
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
unsafe impl Send for MainMenu {
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[async_trait]
 | 
			
		||||
impl<'a> Flow<'a> for MainMenu {
 | 
			
		||||
    async fn run(&self, state: &'a mut GamenightState) -> FlowResult<'a> {
 | 
			
		||||
        let choice = Select::new("What would you like to do?", self.menu)
 | 
			
		||||
            .with_help_message("Select the action you want to take or quit the program")
 | 
			
		||||
            .with_render_config(RenderConfig {
 | 
			
		||||
                option_index_prefix: inquire::ui::IndexPrefix::Simple,
 | 
			
		||||
                ..Default::default()
 | 
			
		||||
            })
 | 
			
		||||
            .prompt_skippable()?;
 | 
			
		||||
 | 
			
		||||
        if let Some(choice) = choice {
 | 
			
		||||
            let (outcome, new_state) = choice.run(state).await?;
 | 
			
		||||
            
 | 
			
		||||
            if outcome == FlowOutcome::Abort {
 | 
			
		||||
                Ok((outcome, new_state))
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                self.run(new_state).await
 | 
			
		||||
            }       
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            return Ok((FlowOutcome::Abort, state))
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl Display for MainMenu {
 | 
			
		||||
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
 | 
			
		||||
        write!(f, "Main menu")
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										59
									
								
								gamenight-cli/src/flows/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								gamenight-cli/src/flows/mod.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,59 @@
 | 
			
		||||
use std::fmt::Display;
 | 
			
		||||
 | 
			
		||||
use async_trait::async_trait;
 | 
			
		||||
use gamenight_api_client_rs::apis::configuration::Configuration;
 | 
			
		||||
use inquire::InquireError;
 | 
			
		||||
 | 
			
		||||
pub mod main;
 | 
			
		||||
pub mod login;
 | 
			
		||||
mod main_menu;
 | 
			
		||||
mod abort;
 | 
			
		||||
mod list_gamenights;
 | 
			
		||||
 | 
			
		||||
pub struct GamenightState {
 | 
			
		||||
    configuration: Configuration,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl GamenightState {
 | 
			
		||||
    pub fn new() -> Self{
 | 
			
		||||
        Self {
 | 
			
		||||
            configuration: Configuration::new()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Debug)]
 | 
			
		||||
pub struct FlowError {
 | 
			
		||||
    pub error: String
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl From<InquireError> for FlowError {
 | 
			
		||||
    fn from(value: InquireError) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            error: value.to_string()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<T> From<gamenight_api_client_rs::apis::Error<T>> for FlowError {
 | 
			
		||||
    fn from(value: gamenight_api_client_rs::apis::Error<T>) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            error: value.to_string()
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(PartialEq)]
 | 
			
		||||
pub enum FlowOutcome {
 | 
			
		||||
    Successful,
 | 
			
		||||
    Bool(bool),
 | 
			
		||||
    String(String),
 | 
			
		||||
    Abort
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type FlowResult<'a> = Result<(FlowOutcome, &'a mut GamenightState), FlowError>;
 | 
			
		||||
 | 
			
		||||
#[async_trait]
 | 
			
		||||
pub trait Flow<'a>: Sync + Display {
 | 
			
		||||
    async fn run(&self, state: &'a mut GamenightState) -> FlowResult<'a>;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								gamenight-cli/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								gamenight-cli/src/main.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,14 @@
 | 
			
		||||
pub mod flows;
 | 
			
		||||
 | 
			
		||||
use flows::{main::Main, Flow, GamenightState};
 | 
			
		||||
 | 
			
		||||
#[tokio::main]
 | 
			
		||||
async fn main() {
 | 
			
		||||
    let mut state = GamenightState::new();
 | 
			
		||||
    let mainflow = Main::new();
 | 
			
		||||
    if let Err(x) = mainflow.run(&mut state).await {
 | 
			
		||||
        println!("{}", x.error);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user