From def26c4be4e89a75f797b4c66cd3a50dbc6ea43c Mon Sep 17 00:00:00 2001 From: Justine Pelletreau Date: Fri, 13 Jan 2023 16:02:14 +0100 Subject: [PATCH] En cours --- .gitignore | 1 + Cargo.lock | 731 +++++++++++++++++++++++++++ Cargo.toml | 10 + html/footer.html | 2 + html/header.html | 16 + html/index.html | 49 ++ html/main.css | 0 html/pics/ferris.png | Bin 0 -> 49537 bytes src/main.rs | 95 ++++ templates/index.html.ft | 7 + templates/pages/1-firstpage.html.ft | 5 + templates/pages/2-secondpage.html.ft | 4 + 12 files changed, 920 insertions(+) create mode 100644 .gitignore create mode 100644 Cargo.lock create mode 100644 Cargo.toml create mode 100644 html/footer.html create mode 100644 html/header.html create mode 100644 html/index.html create mode 100644 html/main.css create mode 100644 html/pics/ferris.png create mode 100644 src/main.rs create mode 100644 templates/index.html.ft create mode 100644 templates/pages/1-firstpage.html.ft create mode 100644 templates/pages/2-secondpage.html.ft diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2f7896d --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +target/ diff --git a/Cargo.lock b/Cargo.lock new file mode 100644 index 0000000..5d52ee6 --- /dev/null +++ b/Cargo.lock @@ -0,0 +1,731 @@ +# This file is automatically @generated by Cargo. +# It is not intended for manual editing. +version = 3 + +[[package]] +name = "ahash" +version = "0.7.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fcb51a0695d8f838b1ee009b3fbf66bda078cd64590202a864a8f3e8c4315c47" +dependencies = [ + "getrandom", + "once_cell", + "version_check", +] + +[[package]] +name = "aho-corasick" +version = "0.7.20" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cc936419f96fa211c1b9166887b38e5e40b19958e5b895be7c1f93adec7071ac" +dependencies = [ + "memchr", +] + +[[package]] +name = "async-trait" +version = "0.1.61" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "705339e0e4a9690e2908d2b3d049d85682cf19fbd5782494498fbf7003a6a282" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "base64" +version = "0.13.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8" + +[[package]] +name = "bitflags" +version = "1.3.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" + +[[package]] +name = "block-buffer" +version = "0.10.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "69cce20737498f97b993470a6e536b8523f0af7892a4f928cceb1ac5e52ebe7e" +dependencies = [ + "generic-array", +] + +[[package]] +name = "cc" +version = "1.0.78" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a20104e2335ce8a659d6dd92a51a767a0c062599c73b343fd152cb401e828c3d" + +[[package]] +name = "cfg-if" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" + +[[package]] +name = "clap" +version = "4.0.32" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a7db700bc935f9e43e88d00b0850dae18a63773cfbec6d8e070fccf7fef89a39" +dependencies = [ + "bitflags", + "clap_derive", + "clap_lex", + "is-terminal", + "once_cell", + "strsim", + "termcolor", +] + +[[package]] +name = "clap_derive" +version = "4.0.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0177313f9f02afc995627906bbd8967e2be069f5261954222dac78290c2b9014" +dependencies = [ + "heck", + "proc-macro-error", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "clap_lex" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0d4198f73e42b4936b35b5bb248d81d2b595ecb170da0bac7655c54eedfa8da8" +dependencies = [ + "os_str_bytes", +] + +[[package]] +name = "config" +version = "0.13.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d379af7f68bfc21714c6c7dea883544201741d2ce8274bb12fa54f89507f52a7" +dependencies = [ + "async-trait", + "json5", + "lazy_static", + "nom", + "pathdiff", + "ron", + "rust-ini", + "serde", + "serde_json", + "toml", + "yaml-rust", +] + +[[package]] +name = "cpufeatures" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28d997bd5e24a5928dd43e46dc529867e207907fe0b239c3477d924f7f2ca320" +dependencies = [ + "libc", +] + +[[package]] +name = "crypto-common" +version = "0.1.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" +dependencies = [ + "generic-array", + "typenum", +] + +[[package]] +name = "digest" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8168378f4e5023e7218c89c891c0fd8ecdb5e5e4f18cb78f38cf245dd021e76f" +dependencies = [ + "block-buffer", + "crypto-common", +] + +[[package]] +name = "dlv-list" +version = "0.3.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0688c2a7f92e427f44895cd63841bff7b29f8d7a1648b9e7e07a4a365b2e1257" + +[[package]] +name = "errno" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f639046355ee4f37944e44f60642c6f3a7efa3cf6b78c78a0d989a8ce6c396a1" +dependencies = [ + "errno-dragonfly", + "libc", + "winapi", +] + +[[package]] +name = "errno-dragonfly" +version = "0.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "aa68f1b12764fab894d2755d2518754e71b4fd80ecfb822714a1206c2aab39bf" +dependencies = [ + "cc", + "libc", +] + +[[package]] +name = "flair" +version = "0.1.0" +source = "git+https://gitea.squi.fr/Rust/flair.git#7b4bf3a7f3ceab8788f2c05a61df02d959d3bb22" +dependencies = [ + "regex", + "ssw", +] + +[[package]] +name = "flog" +version = "0.1.0" +dependencies = [ + "flair", + "ssw", +] + +[[package]] +name = "generic-array" +version = "0.14.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bff49e947297f3312447abdca79f45f4738097cc82b06e72054d2223f601f1b9" +dependencies = [ + "typenum", + "version_check", +] + +[[package]] +name = "getrandom" +version = "0.2.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31" +dependencies = [ + "cfg-if", + "libc", + "wasi", +] + +[[package]] +name = "hashbrown" +version = "0.12.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" +dependencies = [ + "ahash", +] + +[[package]] +name = "heck" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2540771e65fc8cb83cd6e8a237f70c319bd5c29f78ed1084ba5d50eeac86f7f9" + +[[package]] +name = "hermit-abi" +version = "0.2.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ee512640fe35acbfb4bb779db6f0d80704c2cacfa2e39b601ef3e3f47d1ae4c7" +dependencies = [ + "libc", +] + +[[package]] +name = "io-lifetimes" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e7d6c6f8c91b4b9ed43484ad1a938e393caf35960fce7f82a040497207bd8e9e" +dependencies = [ + "libc", + "windows-sys", +] + +[[package]] +name = "is-terminal" +version = "0.4.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "28dfb6c8100ccc63462345b67d1bbc3679177c75ee4bf59bf29c8b1d110b8189" +dependencies = [ + "hermit-abi", + "io-lifetimes", + "rustix", + "windows-sys", +] + +[[package]] +name = "itoa" +version = "1.0.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fad582f4b9e86b6caa621cabeb0963332d92eea04729ab12892c2533951e6440" + +[[package]] +name = "json5" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "96b0db21af676c1ce64250b5f40f3ce2cf27e4e47cb91ed91eb6fe9350b430c1" +dependencies = [ + "pest", + "pest_derive", + "serde", +] + +[[package]] +name = "lazy_static" +version = "1.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" + +[[package]] +name = "libc" +version = "0.2.139" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "201de327520df007757c1f0adce6e827fe8562fbc28bfd9c15571c66ca1f5f79" + +[[package]] +name = "linked-hash-map" +version = "0.5.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" + +[[package]] +name = "linux-raw-sys" +version = "0.1.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f051f77a7c8e6957c0696eac88f26b0117e54f52d3fc682ab19397a8812846a4" + +[[package]] +name = "memchr" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2dffe52ecf27772e601905b7522cb4ef790d2cc203488bbd0e2fe85fcb74566d" + +[[package]] +name = "minimal-lexical" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" + +[[package]] +name = "nom" +version = "7.1.2" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5507769c4919c998e69e49c839d9dc6e693ede4cc4290d6ad8b41d4f09c548c" +dependencies = [ + "memchr", + "minimal-lexical", +] + +[[package]] +name = "once_cell" +version = "1.17.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6f61fba1741ea2b3d6a1e3178721804bb716a68a6aeba1149b5d52e3d464ea66" + +[[package]] +name = "ordered-multimap" +version = "0.4.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ccd746e37177e1711c20dd619a1620f34f5c8b569c53590a72dedd5344d8924a" +dependencies = [ + "dlv-list", + "hashbrown", +] + +[[package]] +name = "os_str_bytes" +version = "6.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9b7820b9daea5457c9f21c69448905d723fbd21136ccf521748f23fd49e723ee" + +[[package]] +name = "pathdiff" +version = "0.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8835116a5c179084a830efb3adc117ab007512b535bc1a21c991d3b32a6b44dd" + +[[package]] +name = "pest" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4257b4a04d91f7e9e6290be5d3da4804dd5784fafde3a497d73eb2b4a158c30a" +dependencies = [ + "thiserror", + "ucd-trie", +] + +[[package]] +name = "pest_derive" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "241cda393b0cdd65e62e07e12454f1f25d57017dcc514b1514cd3c4645e3a0a6" +dependencies = [ + "pest", + "pest_generator", +] + +[[package]] +name = "pest_generator" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "46b53634d8c8196302953c74d5352f33d0c512a9499bd2ce468fc9f4128fa27c" +dependencies = [ + "pest", + "pest_meta", + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "pest_meta" +version = "2.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "0ef4f1332a8d4678b41966bb4cc1d0676880e84183a1ecc3f4b69f03e99c7a51" +dependencies = [ + "once_cell", + "pest", + "sha2", +] + +[[package]] +name = "proc-macro-error" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" +dependencies = [ + "proc-macro-error-attr", + "proc-macro2", + "quote", + "syn", + "version_check", +] + +[[package]] +name = "proc-macro-error-attr" +version = "1.0.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" +dependencies = [ + "proc-macro2", + "quote", + "version_check", +] + +[[package]] +name = "proc-macro2" +version = "1.0.49" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "57a8eca9f9c4ffde41714334dee777596264c7825420f521abc92b5b5deb63a5" +dependencies = [ + "unicode-ident", +] + +[[package]] +name = "quote" +version = "1.0.23" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8856d8364d252a14d474036ea1358d63c9e6965c8e5c1885c18f73d70bff9c7b" +dependencies = [ + "proc-macro2", +] + +[[package]] +name = "regex" +version = "1.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "48aaa5748ba571fb95cd2c85c09f629215d3a6ece942baa100950af03a34f733" +dependencies = [ + "aho-corasick", + "memchr", + "regex-syntax", +] + +[[package]] +name = "regex-syntax" +version = "0.6.28" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "456c603be3e8d448b072f410900c09faf164fbce2d480456f50eea6e25f9c848" + +[[package]] +name = "ron" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "88073939a61e5b7680558e6be56b419e208420c2adb92be54921fa6b72283f1a" +dependencies = [ + "base64", + "bitflags", + "serde", +] + +[[package]] +name = "rust-ini" +version = "0.18.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f6d5f2436026b4f6e79dc829837d467cc7e9a55ee40e750d716713540715a2df" +dependencies = [ + "cfg-if", + "ordered-multimap", +] + +[[package]] +name = "rustix" +version = "0.36.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4feacf7db682c6c329c4ede12649cd36ecab0f3be5b7d74e6a20304725db4549" +dependencies = [ + "bitflags", + "errno", + "io-lifetimes", + "libc", + "linux-raw-sys", + "windows-sys", +] + +[[package]] +name = "ryu" +version = "1.0.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7b4b9743ed687d4b4bcedf9ff5eaa7398495ae14e61cba0a295704edbc7decde" + +[[package]] +name = "serde" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bb7d1f0d3021d347a83e556fc4683dea2ea09d87bccdf88ff5c12545d89d5efb" +dependencies = [ + "serde_derive", +] + +[[package]] +name = "serde_derive" +version = "1.0.152" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af487d118eecd09402d70a5d72551860e788df87b464af30e5ea6a38c75c541e" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "serde_json" +version = "1.0.91" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "877c235533714907a8c2464236f5c4b2a17262ef1bd71f38f35ea592c8da6883" +dependencies = [ + "itoa", + "ryu", + "serde", +] + +[[package]] +name = "sha2" +version = "0.10.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "82e6b795fe2e3b1e845bafcb27aa35405c4d47cdfc92af5fc8d3002f76cebdc0" +dependencies = [ + "cfg-if", + "cpufeatures", + "digest", +] + +[[package]] +name = "ssw" +version = "0.1.0" +source = "git+https://gitea.squi.fr/Rust/ssw.git#9c67bfb2b3a20b3f6c4ba8ee3c262bbe9f1bec6c" +dependencies = [ + "clap", + "config", +] + +[[package]] +name = "strsim" +version = "0.10.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623" + +[[package]] +name = "syn" +version = "1.0.107" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1f4064b5b16e03ae50984a5a8ed5d4f8803e6bc1fd170a3cda91a1be4b18e3f5" +dependencies = [ + "proc-macro2", + "quote", + "unicode-ident", +] + +[[package]] +name = "termcolor" +version = "1.1.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755" +dependencies = [ + "winapi-util", +] + +[[package]] +name = "thiserror" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "6a9cd18aa97d5c45c6603caea1da6628790b37f7a34b6ca89522331c5180fed0" +dependencies = [ + "thiserror-impl", +] + +[[package]] +name = "thiserror-impl" +version = "1.0.38" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1fb327af4685e4d03fa8cbcf1716380da910eeb2bb8be417e7f9fd3fb164f36f" +dependencies = [ + "proc-macro2", + "quote", + "syn", +] + +[[package]] +name = "toml" +version = "0.5.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1333c76748e868a4d9d1017b5ab53171dfd095f70c712fdb4653a406547f598f" +dependencies = [ + "serde", +] + +[[package]] +name = "typenum" +version = "1.16.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "497961ef93d974e23eb6f433eb5fe1b7930b659f06d12dec6fc44a8f554c0bba" + +[[package]] +name = "ucd-trie" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" + +[[package]] +name = "unicode-ident" +version = "1.0.6" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "84a22b9f218b40614adcb3f4ff08b703773ad44fa9423e4e0d346d5db86e4ebc" + +[[package]] +name = "version_check" +version = "0.9.4" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" + +[[package]] +name = "wasi" +version = "0.11.0+wasi-snapshot-preview1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" + +[[package]] +name = "winapi" +version = "0.3.9" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419" +dependencies = [ + "winapi-i686-pc-windows-gnu", + "winapi-x86_64-pc-windows-gnu", +] + +[[package]] +name = "winapi-i686-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" + +[[package]] +name = "winapi-util" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178" +dependencies = [ + "winapi", +] + +[[package]] +name = "winapi-x86_64-pc-windows-gnu" +version = "0.4.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "windows-sys" +version = "0.42.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "5a3e1820f08b8513f676f7ab6c1f99ff312fb97b553d30ff4dd86f9f15728aa7" +dependencies = [ + "windows_aarch64_gnullvm", + "windows_aarch64_msvc", + "windows_i686_gnu", + "windows_i686_msvc", + "windows_x86_64_gnu", + "windows_x86_64_gnullvm", + "windows_x86_64_msvc", +] + +[[package]] +name = "windows_aarch64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "8c9864e83243fdec7fc9c5444389dcbbfd258f745e7853198f365e3c4968a608" + +[[package]] +name = "windows_aarch64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4c8b1b673ffc16c47a9ff48570a9d85e25d265735c503681332589af6253c6c7" + +[[package]] +name = "windows_i686_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de3887528ad530ba7bdbb1faa8275ec7a1155a45ffa57c37993960277145d640" + +[[package]] +name = "windows_i686_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "bf4d1122317eddd6ff351aa852118a2418ad4214e6613a50e0191f7004372605" + +[[package]] +name = "windows_x86_64_gnu" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "c1040f221285e17ebccbc2591ffdc2d44ee1f9186324dd3e84e99ac68d699c45" + +[[package]] +name = "windows_x86_64_gnullvm" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "628bfdf232daa22b0d64fdb62b09fcc36bb01f05a3939e20ab73aaf9470d0463" + +[[package]] +name = "windows_x86_64_msvc" +version = "0.42.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "447660ad36a13288b1db4d4248e857b510e8c3a225c822ba4fb748c0aafecffd" + +[[package]] +name = "yaml-rust" +version = "0.4.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" +dependencies = [ + "linked-hash-map", +] diff --git a/Cargo.toml b/Cargo.toml new file mode 100644 index 0000000..e319b2f --- /dev/null +++ b/Cargo.toml @@ -0,0 +1,10 @@ +[package] +name = "flog" +version = "0.1.0" +edition = "2021" + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +flair = { git = "https://gitea.squi.fr/Rust/flair.git" } +ssw = { git = "https://gitea.squi.fr/Rust/ssw.git" } diff --git a/html/footer.html b/html/footer.html new file mode 100644 index 0000000..308b1d0 --- /dev/null +++ b/html/footer.html @@ -0,0 +1,2 @@ + + diff --git a/html/header.html b/html/header.html new file mode 100644 index 0000000..8324901 --- /dev/null +++ b/html/header.html @@ -0,0 +1,16 @@ + + + + + Example website + + + + + + + + + + + diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..be4eaa1 --- /dev/null +++ b/html/index.html @@ -0,0 +1,49 @@ + + + + + Example website + + + + + + + + + + + + + +

Squi's awesome blog

+

My Second article

+

+

Bye !

+ + + + + Example website + + + + + + + + + + + + +

My First article

+

+

Hello !

+ + + + + + + diff --git a/html/main.css b/html/main.css new file mode 100644 index 0000000..e69de29 diff --git a/html/pics/ferris.png b/html/pics/ferris.png new file mode 100644 index 0000000000000000000000000000000000000000..866412dc60dda68a204978cb15726b22c28567d7 GIT binary patch literal 49537 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 F{{ZTl;J^R? literal 0 HcmV?d00001 diff --git a/src/main.rs b/src/main.rs new file mode 100644 index 0000000..cc93355 --- /dev/null +++ b/src/main.rs @@ -0,0 +1,95 @@ +use flair::flair; +use ssw::websrv::WebsrvConfig; +use ssw::websrv::run_server; +use std::fs; +use std::collections::HashMap; + +//1 - Ingest all the pages into a variable +// : all the pages must start with a number indicating their order +//2 - build the index with the pages +//3 - Put all the generated content inside the html folder +//4 - Start the server and serve + +//#1 : Sends (pages_summary, pages_content) +fn ingest_pages(pages_path: &str) -> Option<(String, String)> { + + //Getting the name of existing pages + let mut pages: Vec = Vec::new(); + for file in fs::read_dir(pages_path).unwrap() { + //println!("{:#?}", file.unwrap().path()); + let mypage = String::from(file + .unwrap() + .path() + .file_name() + .unwrap() + .to_str() + .unwrap() + ); + + &mut pages.push(mypage); + } + pages.sort(); + pages.reverse(); + + if pages.len() > 0 { + //Handling content + let mut pages_content = String::new(); + let mut page_sum = String::new(); + for page in pages { + let vars: HashMap = HashMap::from([ + (String::from("header"), fs::read_to_string("./html/header.html").unwrap()), + (String::from("footer"), fs::read_to_string("./html/footer.html").unwrap()), + ]); + let fullpath = String::from(format!("{pages_path}/{page}")); + let page_res = flair::analyze_file(&fullpath, vars); + //TODO Write the pages to their own file + //and put the correct address in %%sum%% + //So the index is simply "latest articles" + &mut pages_content.push_str(page_res.unwrap().as_str()); + page_sum.push_str(&format!("Article
\n")); + } + return Some((page_sum, pages_content)); + } else { + return None; + } +} + +//#2 & #3 +fn generate_index(pages: (String, String), index_path: &str, html_path: &str) { + let vars: HashMap = HashMap::from([ + (String::from("header"), fs::read_to_string("./html/header.html").unwrap()), + (String::from("footer"), fs::read_to_string("./html/footer.html").unwrap()), + (String::from("pages"), pages.1), + (String::from("sum"), pages.0), + ]); + + let index = flair::analyze_file("./templates/index.html.ft", vars).unwrap(); + + fs::write("./html/index.html", index.as_str()).expect("Could not write index"); +} + +//#4 +fn start_websrv(conf: WebsrvConfig) { + run_server(conf); + loop { + continue; + } +} + +fn main() { + let pages = match ingest_pages("./templates/pages") { + Some(p) => p, + None => (String::new(), String::new()), + }; + + generate_index(pages, "./templates/index.html.ft", "./html"); + + //Web conf + let webconf = WebsrvConfig { + nbr_of_threads: 3, + bind_addr: String::from("0.0.0.0:8080"), + root_folder: String::from("./html"), + }; + start_websrv(webconf); + +} diff --git a/templates/index.html.ft b/templates/index.html.ft new file mode 100644 index 0000000..3078e71 --- /dev/null +++ b/templates/index.html.ft @@ -0,0 +1,7 @@ +%%header%% + +

Squi's awesome blog

+%%pages%% + +%%footer%% + diff --git a/templates/pages/1-firstpage.html.ft b/templates/pages/1-firstpage.html.ft new file mode 100644 index 0000000..a7fa16e --- /dev/null +++ b/templates/pages/1-firstpage.html.ft @@ -0,0 +1,5 @@ +%%header%% +

My First article

+

+

Hello !

+%%footer%% diff --git a/templates/pages/2-secondpage.html.ft b/templates/pages/2-secondpage.html.ft new file mode 100644 index 0000000..1708a57 --- /dev/null +++ b/templates/pages/2-secondpage.html.ft @@ -0,0 +1,4 @@ +

My Second article

+

+

Bye !

+