Initial commit
This commit is contained in:
		
						commit
						09fc6c1307
					
				
					 10 changed files with 768 additions and 0 deletions
				
			
		
							
								
								
									
										1
									
								
								.confg/cspell/dictionary.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.confg/cspell/dictionary.txt
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| luciders | ||||
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | |||
| /target | ||||
							
								
								
									
										593
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							
							
						
						
									
										593
									
								
								Cargo.lock
									
									
									
										generated
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,593 @@ | |||
| # This file is automatically @generated by Cargo. | ||||
| # It is not intended for manual editing. | ||||
| version = 3 | ||||
| 
 | ||||
| [[package]] | ||||
| name = "adler2" | ||||
| version = "2.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "arrayref" | ||||
| version = "0.3.9" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "76a2e8124351fda1ef8aaaa3bbd7ebbcb486bbcd4225aca0aa0d84bb2db8fecb" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "arrayvec" | ||||
| version = "0.7.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "base64" | ||||
| version = "0.22.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bitflags" | ||||
| version = "1.3.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bitflags" | ||||
| version = "2.6.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "bytemuck" | ||||
| version = "1.19.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8334215b81e418a0a7bdb8ef0849474f40bb10c8b71f1c4ed315cff49f32494d" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "byteorder-lite" | ||||
| version = "0.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8f1fe948ff07f4bd06c30984e69f5b4899c516a3ef74f34df92a2df2ab535495" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "cfg-if" | ||||
| version = "1.0.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "cfg_aliases" | ||||
| version = "0.2.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "613afe47fcd5fac7ccf1db93babcb082c5994d996f20b8b159f2ad1658eb5724" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "color_quant" | ||||
| version = "1.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3d7b894f5411737b7867f4827955924d7c254fc9f4d91a6aad6b097804b1018b" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "core_maths" | ||||
| version = "0.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e3b02505ccb8c50b0aa21ace0fc08c3e53adebd4e58caa18a36152803c7709a3" | ||||
| dependencies = [ | ||||
|  "libm", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "crc32fast" | ||||
| version = "1.4.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" | ||||
| dependencies = [ | ||||
|  "cfg-if", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ctrlc" | ||||
| version = "3.4.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "90eeab0aa92f3f9b4e87f258c72b139c207d251f9cbc1080a0086b86a8870dd3" | ||||
| dependencies = [ | ||||
|  "nix", | ||||
|  "windows-sys", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "data-url" | ||||
| version = "0.3.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5c297a1c74b71ae29df00c3e22dd9534821d60eb9af5a0192823fa2acea70c2a" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "fdeflate" | ||||
| version = "0.3.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "07c6f4c64c1d33a3111c4466f7365ebdcc37c5bd1ea0d62aae2e3d722aacbedb" | ||||
| dependencies = [ | ||||
|  "simd-adler32", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "flate2" | ||||
| version = "1.0.34" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a1b589b4dc103969ad3cf85c950899926ec64300a1a46d76c03a6072957036f0" | ||||
| dependencies = [ | ||||
|  "crc32fast", | ||||
|  "miniz_oxide", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "float-cmp" | ||||
| version = "0.9.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "98de4bbd547a563b716d8dfa9aad1cb19bfab00f4fa09a6a4ed21dbcf44ce9c4" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "fontconfig-parser" | ||||
| version = "0.5.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c1fcfcd44ca6e90c921fee9fa665d530b21ef1327a4c1a6c5250ea44b776ada7" | ||||
| dependencies = [ | ||||
|  "roxmltree", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "fontdb" | ||||
| version = "0.22.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a3a6f9af55fb97ad673fb7a69533eb2f967648a06fa21f8c9bb2cd6d33975716" | ||||
| dependencies = [ | ||||
|  "fontconfig-parser", | ||||
|  "log", | ||||
|  "memmap2", | ||||
|  "slotmap", | ||||
|  "tinyvec", | ||||
|  "ttf-parser", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "gif" | ||||
| version = "0.13.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3fb2d69b19215e18bb912fa30f7ce15846e301408695e44e0ef719f1da9e19f2" | ||||
| dependencies = [ | ||||
|  "color_quant", | ||||
|  "weezl", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "image-webp" | ||||
| version = "0.1.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "f79afb8cbee2ef20f59ccd477a218c12a93943d075b492015ecb1bb81f8ee904" | ||||
| dependencies = [ | ||||
|  "byteorder-lite", | ||||
|  "quick-error", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "imagesize" | ||||
| version = "0.13.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "edcd27d72f2f071c64249075f42e205ff93c9a4c5f6c6da53e79ed9f9832c285" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "kurbo" | ||||
| version = "0.11.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "89234b2cc610a7dd927ebde6b41dd1a5d4214cffaef4cf1fb2195d592f92518f" | ||||
| dependencies = [ | ||||
|  "arrayvec", | ||||
|  "smallvec", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "libc" | ||||
| version = "0.2.161" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8e9489c2807c139ffd9c1794f4af0ebe86a828db53ecdc7fea2111d0fed085d1" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "libm" | ||||
| version = "0.2.11" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "log" | ||||
| version = "0.4.22" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "luciders" | ||||
| version = "0.1.0" | ||||
| dependencies = [ | ||||
|  "ctrlc", | ||||
|  "resvg", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "memmap2" | ||||
| version = "0.9.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "fd3f7eed9d3848f8b98834af67102b720745c4ec028fcd0aa0239277e7de374f" | ||||
| dependencies = [ | ||||
|  "libc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "miniz_oxide" | ||||
| version = "0.8.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" | ||||
| dependencies = [ | ||||
|  "adler2", | ||||
|  "simd-adler32", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "nix" | ||||
| version = "0.29.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "71e2746dc3a24dd78b3cfcb7be93368c6de9963d30f43a6a73998a9cf4b17b46" | ||||
| dependencies = [ | ||||
|  "bitflags 2.6.0", | ||||
|  "cfg-if", | ||||
|  "cfg_aliases", | ||||
|  "libc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "pico-args" | ||||
| version = "0.5.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5be167a7af36ee22fe3115051bc51f6e6c7054c9348e28deb4f49bd6f705a315" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "png" | ||||
| version = "0.17.14" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "52f9d46a34a05a6a57566bc2bfae066ef07585a6e3fa30fbbdff5936380623f0" | ||||
| dependencies = [ | ||||
|  "bitflags 1.3.2", | ||||
|  "crc32fast", | ||||
|  "fdeflate", | ||||
|  "flate2", | ||||
|  "miniz_oxide", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "quick-error" | ||||
| version = "2.0.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a993555f31e5a609f617c12db6250dedcac1b0a85076912c436e6fc9b2c8e6a3" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "resvg" | ||||
| version = "0.44.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "4a325d5e8d1cebddd070b13f44cec8071594ab67d1012797c121f27a669b7958" | ||||
| dependencies = [ | ||||
|  "gif", | ||||
|  "image-webp", | ||||
|  "log", | ||||
|  "pico-args", | ||||
|  "rgb", | ||||
|  "svgtypes", | ||||
|  "tiny-skia", | ||||
|  "usvg", | ||||
|  "zune-jpeg", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rgb" | ||||
| version = "0.8.50" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "57397d16646700483b67d2dd6511d79318f9d057fdbd21a4066aeac8b41d310a" | ||||
| dependencies = [ | ||||
|  "bytemuck", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "roxmltree" | ||||
| version = "0.20.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6c20b6793b5c2fa6553b250154b78d6d0db37e72700ae35fad9387a46f487c97" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "rustybuzz" | ||||
| version = "0.18.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "c85d1ccd519e61834798eb52c4e886e8c2d7d698dd3d6ce0b1b47eb8557f1181" | ||||
| dependencies = [ | ||||
|  "bitflags 2.6.0", | ||||
|  "bytemuck", | ||||
|  "core_maths", | ||||
|  "log", | ||||
|  "smallvec", | ||||
|  "ttf-parser", | ||||
|  "unicode-bidi-mirroring", | ||||
|  "unicode-ccc", | ||||
|  "unicode-properties", | ||||
|  "unicode-script", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "simd-adler32" | ||||
| version = "0.3.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "d66dc143e6b11c1eddc06d5c423cfc97062865baf299914ab64caa38182078fe" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "simplecss" | ||||
| version = "0.2.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "a11be7c62927d9427e9f40f3444d5499d868648e2edbc4e2116de69e7ec0e89d" | ||||
| dependencies = [ | ||||
|  "log", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "siphasher" | ||||
| version = "1.0.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "56199f7ddabf13fe5074ce809e7d3f42b42ae711800501b5b16ea82ad029c39d" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "slotmap" | ||||
| version = "1.0.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "dbff4acf519f630b3a3ddcfaea6c06b42174d9a44bc70c620e9ed1649d58b82a" | ||||
| dependencies = [ | ||||
|  "version_check", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "smallvec" | ||||
| version = "1.13.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "strict-num" | ||||
| version = "0.1.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "6637bab7722d379c8b41ba849228d680cc12d0a45ba1fa2b48f2a30577a06731" | ||||
| dependencies = [ | ||||
|  "float-cmp", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "svgtypes" | ||||
| version = "0.15.2" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "794de53cc48eaabeed0ab6a3404a65f40b3e38c067e4435883a65d2aa4ca000e" | ||||
| dependencies = [ | ||||
|  "kurbo", | ||||
|  "siphasher", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tiny-skia" | ||||
| version = "0.11.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "83d13394d44dae3207b52a326c0c85a8bf87f1541f23b0d143811088497b09ab" | ||||
| dependencies = [ | ||||
|  "arrayref", | ||||
|  "arrayvec", | ||||
|  "bytemuck", | ||||
|  "cfg-if", | ||||
|  "log", | ||||
|  "png", | ||||
|  "tiny-skia-path", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tiny-skia-path" | ||||
| version = "0.11.4" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9c9e7fc0c2e86a30b117d0462aa261b72b7a99b7ebd7deb3a14ceda95c5bdc93" | ||||
| dependencies = [ | ||||
|  "arrayref", | ||||
|  "bytemuck", | ||||
|  "strict-num", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tinyvec" | ||||
| version = "1.8.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "445e881f4f6d382d5f27c034e25eb92edd7c784ceab92a0937db7f2e9471b938" | ||||
| dependencies = [ | ||||
|  "tinyvec_macros", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "tinyvec_macros" | ||||
| version = "0.1.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "ttf-parser" | ||||
| version = "0.24.1" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5be21190ff5d38e8b4a2d3b6a3ae57f612cc39c96e83cedeaf7abc338a8bac4a" | ||||
| dependencies = [ | ||||
|  "core_maths", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "unicode-bidi" | ||||
| version = "0.3.17" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "5ab17db44d7388991a428b2ee655ce0c212e862eff1768a455c58f9aad6e7893" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "unicode-bidi-mirroring" | ||||
| version = "0.3.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "64af057ad7466495ca113126be61838d8af947f41d93a949980b2389a118082f" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "unicode-ccc" | ||||
| version = "0.3.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "260bc6647b3893a9a90668360803a15f96b85a5257b1c3a0c3daf6ae2496de42" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "unicode-properties" | ||||
| version = "0.1.3" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "e70f2a8b45122e719eb623c01822704c4e0907e7e426a05927e1a1cfff5b75d0" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "unicode-script" | ||||
| version = "0.5.7" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9fb421b350c9aff471779e262955939f565ec18b86c15364e6bdf0d662ca7c1f" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "unicode-vo" | ||||
| version = "0.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "b1d386ff53b415b7fe27b50bb44679e2cc4660272694b7b6f3326d8480823a94" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "usvg" | ||||
| version = "0.44.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "7447e703d7223b067607655e625e0dbca80822880248937da65966194c4864e6" | ||||
| dependencies = [ | ||||
|  "base64", | ||||
|  "data-url", | ||||
|  "flate2", | ||||
|  "fontdb", | ||||
|  "imagesize", | ||||
|  "kurbo", | ||||
|  "log", | ||||
|  "pico-args", | ||||
|  "roxmltree", | ||||
|  "rustybuzz", | ||||
|  "simplecss", | ||||
|  "siphasher", | ||||
|  "strict-num", | ||||
|  "svgtypes", | ||||
|  "tiny-skia-path", | ||||
|  "unicode-bidi", | ||||
|  "unicode-script", | ||||
|  "unicode-vo", | ||||
|  "xmlwriter", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "version_check" | ||||
| version = "0.9.5" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "weezl" | ||||
| version = "0.1.8" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "53a85b86a771b1c87058196170769dd264f66c0782acf1ae6cc51bfd64b39082" | ||||
| 
 | ||||
| [[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" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" | ||||
| dependencies = [ | ||||
|  "windows_aarch64_gnullvm", | ||||
|  "windows_aarch64_msvc", | ||||
|  "windows_i686_gnu", | ||||
|  "windows_i686_gnullvm", | ||||
|  "windows_i686_msvc", | ||||
|  "windows_x86_64_gnu", | ||||
|  "windows_x86_64_gnullvm", | ||||
|  "windows_x86_64_msvc", | ||||
| ] | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows_aarch64_gnullvm" | ||||
| version = "0.52.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows_aarch64_msvc" | ||||
| version = "0.52.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows_i686_gnu" | ||||
| version = "0.52.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows_i686_gnullvm" | ||||
| version = "0.52.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows_i686_msvc" | ||||
| version = "0.52.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows_x86_64_gnu" | ||||
| version = "0.52.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows_x86_64_gnullvm" | ||||
| version = "0.52.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "windows_x86_64_msvc" | ||||
| version = "0.52.6" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "xmlwriter" | ||||
| version = "0.1.0" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "ec7a2a501ed189703dba8b08142f057e887dfc4b2cc4db2d343ac6376ba3e0b9" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "zune-core" | ||||
| version = "0.4.12" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "3f423a2c17029964870cfaabb1f13dfab7d092a62a29a89264f4d36990ca414a" | ||||
| 
 | ||||
| [[package]] | ||||
| name = "zune-jpeg" | ||||
| version = "0.4.13" | ||||
| source = "registry+https://github.com/rust-lang/crates.io-index" | ||||
| checksum = "16099418600b4d8f028622f73ff6e3deaabdff330fb9a2a131dea781ee8b0768" | ||||
| dependencies = [ | ||||
|  "zune-core", | ||||
| ] | ||||
							
								
								
									
										8
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										8
									
								
								Cargo.toml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,8 @@ | |||
| [package] | ||||
| name = "luciders" | ||||
| version = "0.1.0" | ||||
| edition = "2021" | ||||
| 
 | ||||
| [dependencies] | ||||
| ctrlc = "3.4.5" | ||||
| resvg = "0.44.0" | ||||
							
								
								
									
										18
									
								
								cspell.config.yaml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								cspell.config.yaml
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,18 @@ | |||
| --- | ||||
| $schema: https://raw.githubusercontent.com/streetsidesoftware/cspell/main/cspell.schema.json | ||||
| version: '0.2' | ||||
| allowCompoundWords: true | ||||
| dictionaryDefinitions: | ||||
|   - name: project-dictionary | ||||
|     path: './.config/cspell/dictionary.txt' | ||||
|     addWords: true | ||||
| dictionaries: | ||||
|   - project-dictionary | ||||
| 
 | ||||
|   - rust | ||||
|   - softwareTerms | ||||
|   - companies | ||||
|   - en-gb | ||||
| ignorePaths: | ||||
|   - 'target/**' | ||||
|   - '.config/cspell/*.txt' | ||||
							
								
								
									
										2
									
								
								src/http.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/http.rs
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,2 @@ | |||
| pub mod responses; | ||||
| pub mod requests; | ||||
							
								
								
									
										12
									
								
								src/http/requests.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								src/http/requests.rs
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,12 @@ | |||
| use std::collections::HashMap; | ||||
| 
 | ||||
| struct Path<'a> { | ||||
|   pub query: HashMap<&'a str, &'a str> | ||||
| } | ||||
| 
 | ||||
| impl Path { | ||||
|   pub fn new<'a>(path: &'a str) -> Self { | ||||
|     let query = path.split("?").collect(); | ||||
|     Path { query } | ||||
|   } | ||||
| } | ||||
							
								
								
									
										54
									
								
								src/http/responses.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										54
									
								
								src/http/responses.rs
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,54 @@ | |||
| use std::error::Error; | ||||
| use std::io::prelude::*; | ||||
| use std::net::TcpStream; | ||||
| 
 | ||||
| type UnitOrBoxedError = Result<(), Box<dyn Error>>; | ||||
| 
 | ||||
| fn send_response(mut stream: TcpStream, status: u16, body: &str) -> UnitOrBoxedError { | ||||
|     let status_line = match status { | ||||
|         200 => "HTTP/1.1 200 OK", | ||||
|         400 => "HTTP/1.1 400 BAD REQUEST", | ||||
|         404 => "HTTP/1.1 404 NOT FOUND", | ||||
|         405 => "HTTP/1.1 405 METHOD NOT ALLOWED", | ||||
|         _ => "HTTP/1.1 500 INTERNAL SERVER ERROR", | ||||
|     }; | ||||
| 
 | ||||
|     let response = format!( | ||||
|         "{}\r\nContent-Length: {}\r\n\r\n{}", | ||||
|         status_line, | ||||
|         body.len(), | ||||
|         body | ||||
|     ); | ||||
| 
 | ||||
|     match stream.write(response.as_bytes()) { | ||||
|         Ok(_) => {} | ||||
|         Err(e) => { | ||||
|             return Err(Box::new(e)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     match stream.flush() { | ||||
|         Ok(_) => {} | ||||
|         Err(e) => { | ||||
|             return Err(Box::new(e)); | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     Ok(()) | ||||
| } | ||||
| 
 | ||||
| pub fn ok(stream: TcpStream, body: &str) -> UnitOrBoxedError { | ||||
|     send_response(stream, 200, body) | ||||
| } | ||||
| 
 | ||||
| pub fn send_400(stream: TcpStream) -> UnitOrBoxedError { | ||||
|     send_response(stream, 400, "Bad Request") | ||||
| } | ||||
| 
 | ||||
| pub fn send_404(stream: TcpStream) -> UnitOrBoxedError { | ||||
|     send_response(stream, 404, "Not Found") | ||||
| } | ||||
| 
 | ||||
| pub fn send_405(stream: TcpStream) -> UnitOrBoxedError { | ||||
|     send_response(stream, 405, "Method Not Allowed") | ||||
| } | ||||
							
								
								
									
										0
									
								
								src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										0
									
								
								src/lib.rs
									
									
									
									
									
										Normal file
									
								
							
							
								
								
									
										79
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										79
									
								
								src/main.rs
									
									
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,79 @@ | |||
| use std::{ | ||||
|     io::{prelude::*, BufReader}, | ||||
|     net::{TcpListener, TcpStream}, | ||||
|     process, | ||||
| }; | ||||
| 
 | ||||
| use ctrlc; | ||||
| 
 | ||||
| mod http; | ||||
| 
 | ||||
| fn main() { | ||||
|     let listener = | ||||
|         TcpListener::bind("127.0.0.1:7878").unwrap_or_else(|_| fatal("Failed to bind to address")); | ||||
| 
 | ||||
|     ctrlc::set_handler(move || { | ||||
|         println!("Shutting down..."); | ||||
|         process::exit(0); | ||||
|     }) | ||||
|     .unwrap_or_else(|_| fatal("Failed to set termination signal handler")); | ||||
| 
 | ||||
|     for stream in listener.incoming() { | ||||
|         match stream { | ||||
|             Ok(stream) => { | ||||
|                 handle_connection(stream); | ||||
|             } | ||||
|             Err(e) => { | ||||
|                 eprintln!("Failed to establish connection: {}", e); | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn handle_connection(mut stream: TcpStream) { | ||||
|     let reader = BufReader::new(&mut stream); | ||||
|     let mut lines = reader.lines(); | ||||
| 
 | ||||
|     let request_line = match lines.next() { | ||||
|         Some(Ok(line)) => line, | ||||
|         _ => { | ||||
|             http::responses::send_400(stream) | ||||
|                 .unwrap_or_else(|_| error("Failed to send 400 response")); | ||||
|             return; | ||||
|         } | ||||
|     }; | ||||
| 
 | ||||
|     let request_line_parts: Vec<&str> = request_line.split_whitespace().collect(); | ||||
|     if request_line_parts.len() != 3 { | ||||
|         http::responses::send_400(stream).unwrap_or_else(|_| error("Failed to send 400 response")); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     let (method, path) = (request_line_parts[0], request_line_parts[1]); | ||||
|     if method != "GET" { | ||||
|         http::responses::send_405(stream).unwrap_or_else(|_| error("Failed to send 405 response")); | ||||
|         return; | ||||
|     } | ||||
| 
 | ||||
|     let path = if path.ends_with("/") { | ||||
|         &path[..path.len() - 1] | ||||
|     } else { | ||||
|         path | ||||
|     }; | ||||
| 
 | ||||
|     match path { | ||||
|         "/" => http::responses::ok(stream, "OK - luciders is working!") | ||||
|             .unwrap_or_else(|_| error("Failed to send 200 response")), | ||||
|         _ => http::responses::send_404(stream) | ||||
|             .unwrap_or_else(|_| error("Failed to send 404 response")), | ||||
|     } | ||||
| } | ||||
| 
 | ||||
| fn fatal(msg: &'static str) -> ! { | ||||
|     eprintln!("[FATAL] {}", msg); | ||||
|     process::exit(1); | ||||
| } | ||||
| 
 | ||||
| fn error(msg: &'static str) { | ||||
|     eprintln!("[ERROR] {}", msg); | ||||
| } | ||||
		Loading…
	
		Reference in a new issue