├── static ├── resume.pdf └── fonts │ ├── cmunbi.ttf │ ├── cmunbl.ttf │ ├── cmunbx.ttf │ ├── cmunci.ttf │ ├── cmunrm.ttf │ ├── cmunsl.ttf │ ├── cmunti.ttf │ └── cmunui.ttf ├── src ├── dev_server.rs └── main.rs ├── .gitignore ├── Cargo.toml ├── templates ├── index.html ├── post.html └── base.html ├── content ├── 2024 │ └── 08 │ │ └── 2024-08-12_chain-abstraction-thoughts.md └── home.md ├── LICENSE ├── .github └── workflows │ └── deploy.yml ├── README.md └── Cargo.lock /static/resume.pdf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/resume.pdf -------------------------------------------------------------------------------- /static/fonts/cmunbi.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/fonts/cmunbi.ttf -------------------------------------------------------------------------------- /static/fonts/cmunbl.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/fonts/cmunbl.ttf -------------------------------------------------------------------------------- /static/fonts/cmunbx.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/fonts/cmunbx.ttf -------------------------------------------------------------------------------- /static/fonts/cmunci.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/fonts/cmunci.ttf -------------------------------------------------------------------------------- /static/fonts/cmunrm.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/fonts/cmunrm.ttf -------------------------------------------------------------------------------- /static/fonts/cmunsl.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/fonts/cmunsl.ttf -------------------------------------------------------------------------------- /static/fonts/cmunti.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/fonts/cmunti.ttf -------------------------------------------------------------------------------- /static/fonts/cmunui.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/jacobdcastro/personal-site/HEAD/static/fonts/cmunui.ttf -------------------------------------------------------------------------------- /src/dev_server.rs: -------------------------------------------------------------------------------- 1 | use actix_files::Files; 2 | use actix_web::{middleware::Logger, App, HttpServer}; 3 | use log::info; 4 | 5 | #[actix_web::main] 6 | async fn main() -> std::io::Result<()> { 7 | // initialize logger 8 | env_logger::init_from_env(env_logger::Env::new().default_filter_or("info")); 9 | 10 | let port = 3000; 11 | info!("Starting development server at http://localhost:{}", port); 12 | 13 | HttpServer::new(|| { 14 | App::new() 15 | .wrap(Logger::default()) 16 | // serve files from the dist directory 17 | .service(Files::new("/", "dist").index_file("index.html")) 18 | }) 19 | .bind(("127.0.0.1", port))? 20 | .run() 21 | .await 22 | } 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # See https://help.github.com/articles/ignoring-files/ for more about ignoring files. 2 | 3 | # dependencies 4 | /node_modules 5 | /.pnp 6 | .pnp.* 7 | .yarn/* 8 | !.yarn/patches 9 | !.yarn/plugins 10 | !.yarn/releases 11 | !.yarn/versions 12 | 13 | # testing 14 | /coverage 15 | 16 | # next.js 17 | /.next/ 18 | /out/ 19 | 20 | # production 21 | /build 22 | 23 | # misc 24 | .DS_Store 25 | *.pem 26 | 27 | # debug 28 | npm-debug.log* 29 | yarn-debug.log* 30 | yarn-error.log* 31 | .pnpm-debug.log* 32 | 33 | # env files (can opt-in for committing if needed) 34 | .env* 35 | 36 | # vercel 37 | .vercel 38 | 39 | # typescript 40 | *.tsbuildinfo 41 | next-env.d.ts 42 | 43 | 44 | # Added by cargo 45 | 46 | /target 47 | 48 | # dist 49 | /dist -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "personal-site" 3 | version = "0.1.0" 4 | edition = "2021" 5 | 6 | [dependencies] 7 | comrak = "0.18" # markdown to html converter 8 | tera = "1.19" # templating engine 9 | walkdir = "2.4" # directory traversal 10 | chrono = { version = "0.4", features = ["serde"] } 11 | serde = { version = "1.0", features = ["derive"] } 12 | serde_yaml = "0.9" 13 | html2text = "0.13.5" 14 | html_parser = "0.7.0" # html parser and formatter 15 | pulldown-cmark = "0.9" 16 | actix-web = "4.4" 17 | actix-files = "0.6" 18 | env_logger = "0.10" 19 | log = "0.4" 20 | 21 | [[bin]] 22 | name = "dev_server" 23 | path = "src/dev_server.rs" 24 | 25 | [[bin]] 26 | name = "build_site" 27 | path = "src/main.rs" 28 | -------------------------------------------------------------------------------- /templates/index.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}XIV Systems | Jacob D. Castro{% endblock %} 4 | {% block description %}Thoughts and doings of a crypto software engineer{% endblock %} 5 | 6 | {% block og_title %}XIV Systems | Jacob D. Castro{% endblock %} 7 | {% block og_description %}Thoughts and doings of a crypto software engineer{% endblock %} 8 | {% block og_url %}https://xiv.systems/{% endblock %} 9 | 10 | {% block twitter_title %}XIV Systems | Jacob D. Castro{% endblock %} 11 | {% block twitter_description %}Thoughts and doings of a crypto software engineer{% endblock %} 12 | 13 | {% block content %} 14 | 15 | {{ home_content | safe }} 16 | 17 | 18 |
19 |

Posts

20 | {% for post in posts | sort(attribute="date") | reverse %} 21 |
22 |

23 | {{ post.date | date(format='%Y-%m-%d') }} – 24 | {{ post.title }} 25 |

26 |
27 | {% endfor %} 28 |
29 | {% endblock %} -------------------------------------------------------------------------------- /content/home.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: XIV Systems | Jacob D. Castro 3 | description: Thoughts and doings of a crypto software engineer 4 | layout: home 5 | date: 2024-12-17 6 | lastmod: 2024-12-17 7 | slug: / 8 | --- 9 | 10 | # XIV Systems | Jacob D. Castro 11 | 12 | I'm Jacob D. Castro, a crypto software engineer. I like Rust, Solidity, and fullstack TypeScript. 13 | 14 | ## What I Do 15 | 16 | - Fullstack Development (JavaScript/TypeScript, React, Node.js) 17 | - Smart Contract Development (Solidity, EVM) 18 | - Systems Programming (Rust, Golang) 19 | - DevOps & Infrastructure (CI/CD, Docker, AWS/GCP) 20 | 21 | ## Recent Work 22 | 23 | Check out some of my notable projects: 24 | 25 | - [ZuBerlin 2024 Hackathon Winner](https://github.com/jacobdcastro/preconf-devnet-dashboard) 26 | - [CHIP-8 CPU Emulator](https://github.com/jacobdcastro/chip8-cpu-emulator) 27 | - [Rust Static Site Generator](https://github.com/jacobdcastro/personal-site) (this site) 28 | 29 | ## Links 30 | 31 | - [Email](mailto:jacob@xiv.systems) 32 | - [Twitter](https://x.com/jacobdcastro) 33 | - [GitHub](https://github.com/jacobdcastro) 34 | - [Resumé](/resume.pdf) -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Jacob D. Castro 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /.github/workflows/deploy.yml: -------------------------------------------------------------------------------- 1 | name: Deploy to GitHub Pages 2 | 3 | on: 4 | push: 5 | branches: [ "main" ] 6 | workflow_dispatch: 7 | 8 | permissions: 9 | contents: read 10 | pages: write 11 | id-token: write 12 | 13 | concurrency: 14 | group: "pages" 15 | cancel-in-progress: false 16 | 17 | jobs: 18 | build: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - uses: actions/checkout@v4 22 | 23 | - name: Setup Rust 24 | uses: dtolnay/rust-toolchain@stable 25 | 26 | - name: Cache Rust dependencies 27 | uses: Swatinem/rust-cache@v2 28 | 29 | - name: Build site 30 | run: | 31 | cargo build --release --bin build_site 32 | ./target/release/build_site 33 | 34 | - name: Upload artifact 35 | uses: actions/upload-pages-artifact@v3 36 | with: 37 | path: ./dist 38 | 39 | deploy: 40 | environment: 41 | name: github-pages 42 | url: ${{ steps.deployment.outputs.page_url }} 43 | runs-on: ubuntu-latest 44 | needs: build 45 | steps: 46 | - name: Deploy to GitHub Pages 47 | id: deployment 48 | uses: actions/deploy-pages@v4 49 | -------------------------------------------------------------------------------- /templates/post.html: -------------------------------------------------------------------------------- 1 | {% extends "base.html" %} 2 | 3 | {% block title %}{{ post.title }}{% endblock %} 4 | {% block description %}{{ meta_description }}{% endblock %} 5 | 6 | {% block og_title %}{{ post.title }}{% endblock %} 7 | {% block og_description %}{{ meta_description }}{% endblock %} 8 | {% block og_type %}article{% endblock %} 9 | {% block og_url %}https://xiv.systems/posts/{{ post.slug }}.html{% endblock %} 10 | 11 | {% block twitter_title %}{{ post.title }}{% endblock %} 12 | {% block twitter_description %}{{ meta_description }}{% endblock %} 13 | 14 | {% block meta_keywords %} 15 | {% if post.tags %} 16 | 17 | {% endif %} 18 | {% endblock %} 19 | 20 | {% block article_meta %} 21 | 22 | {% if post.tags %} 23 | {% for tag in post.tags %} 24 | 25 | {% endfor %} 26 | {% endif %} 27 | {% endblock %} 28 | 29 | {% block content %} 30 |
31 |

{{ post.title }}

32 | 35 | {{ post.content | safe }} 36 |
37 | {% endblock %} -------------------------------------------------------------------------------- /templates/base.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | {# common meta tags #} 9 | {% block title %}{% endblock %} 10 | 11 | 12 | {# open graph tags #} 13 | 14 | 15 | 16 | 17 | 18 | {# twitter card tags #} 19 | 20 | 21 | 22 | 23 | {# if you have tags, output them as keywords #} 24 | {% block meta_keywords %}{% endblock %} 25 | 26 | {# article specific meta tags #} 27 | {% block article_meta %}{% endblock %} 28 | 29 | 30 | 31 | {% block content %}{% endblock %} 32 | 33 | 34 | 38 | 39 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | This is a [Next.js](https://nextjs.org) project bootstrapped with [`create-next-app`](https://nextjs.org/docs/app/api-reference/cli/create-next-app). 2 | 3 | ## Getting Started 4 | 5 | First, run the development server: 6 | 7 | ```bash 8 | npm run dev 9 | # or 10 | yarn dev 11 | # or 12 | pnpm dev 13 | # or 14 | bun dev 15 | ``` 16 | 17 | Open [http://localhost:3000](http://localhost:3000) with your browser to see the result. 18 | 19 | You can start editing the page by modifying `app/page.tsx`. The page auto-updates as you edit the file. 20 | 21 | This project uses [`next/font`](https://nextjs.org/docs/app/building-your-application/optimizing/fonts) to automatically optimize and load [Geist](https://vercel.com/font), a new font family for Vercel. 22 | 23 | ## Learn More 24 | 25 | To learn more about Next.js, take a look at the following resources: 26 | 27 | - [Next.js Documentation](https://nextjs.org/docs) - learn about Next.js features and API. 28 | - [Learn Next.js](https://nextjs.org/learn) - an interactive Next.js tutorial. 29 | 30 | You can check out [the Next.js GitHub repository](https://github.com/vercel/next.js) - your feedback and contributions are welcome! 31 | 32 | ## Deploy on Vercel 33 | 34 | The easiest way to deploy your Next.js app is to use the [Vercel Platform](https://vercel.com/new?utm_medium=default-template&filter=next.js&utm_source=create-next-app&utm_campaign=create-next-app-readme) from the creators of Next.js. 35 | 36 | Check out our [Next.js deployment documentation](https://nextjs.org/docs/app/building-your-application/deploying) for more details. 37 | -------------------------------------------------------------------------------- /content/2024/08/2024-08-12_chain-abstraction-thoughts.md: -------------------------------------------------------------------------------- 1 | --- 2 | title: Thoughts on Chain Abstraction 3 | date: 2024-08-12 4 | description: Thoughts on Chain Abstraction 5 | tags: [chain-abstraction] 6 | slug: 2024/08/chain-abstraction-thoughts 7 | --- 8 | 9 | ## My thoughts on the recent chain abstraction (CA) discourse after building an appchain platform for a couple months: 10 | 11 | **First of all, let's all admit to ourselves that we don't really know what CA looks like in practice when mass-adopted.** 12 | Abstraction (whether chain, account, or a hybrid), like decentralization, is a spectrum. 13 | 14 | Every CA startup has a different approach and definition on how it'll change crypto's UX (and, they're all awesome and noteworthy). 15 | 16 | ***What we do know, is that most (if not all) crypto applications have a glaring blockchain smell.*** 17 | And CA aims to reduce this blockchain smell as much as the users and applications would like. 18 | 19 | This article isn't about nitpicking the definition of chain abstraction, but rather addressing the current *and future* relationship between CA and other well-established protocols, apps, and users. Let's get into it. 20 | 21 | ## **Do *chains* want chain abstraction?** 22 | 23 | No, of course not. Because most of the **current** chains are *general-purpose chains* (or app-specific trying to hit general-purpose growth metrics). 24 | Chains are too married to the TVL metric and don't want users to easily interoperate between their chain and others, aka, *bring your liquidity here but please don't leave*. 25 | 26 | Since the emergence of the rollup-centric roadmap, there has been an uncanny focus on *making blockchains sticky*. 27 | I believe this is an incorrect approach. This "make chains/protocols sticky" philosophy has led to many claims of too much infrastructure and not enough apps. 28 | 29 | ### Why are we trying to make our chains sticky? 30 | 31 | Because in the current state of crypto, users DO have to make a decision on which chain to use. 32 | The wallet/txn UX still requires a "select network" step. And chains are still fighting for users to select their network over others. 33 | 34 | This is the way of thinking of chain operators and, until the "select network" step becomes irrelevant, chains are going to continue to focus on making their chain sticky. 35 | 36 | Weird behavior if you ask me. 37 | 38 | ## **Do *users* want chain abstraction?** 39 | 40 | Also, no! Because "users" right now are crypto-native and sophisticated. They don't have problems to be solved by CA. 41 | The "select network" step is perfectly normal to them, the same way that needing everyone to be off the phone in order to use the internet was a normal step. 42 | 43 | Crypto users have been around long enough to just be okay with how things are now. They only need to actually use 2-4 chains, and then airdrop farm all the others. 44 | *Annoying?* Yeah a little, especially during tax season. But that's just how things are. 45 | 46 | Users are always oddly satisfied with how things are. Thus, they don't want/need chain abstraction. 47 | 48 | But when has tech ever been fully satisfied with how things are? 49 | 50 | # **So why Chain Abstraction?** 51 | 52 | Clearly, chain abstraction isn't needed, right? No one's asking for it, everyone's fine. 53 | 54 | *"Users SHOULD BE ABLE TO CHOOSE their chain because all chains are a little bit different, and that changes the risk profile of the money stored onchain." – someone, probably* 55 | 56 | **The truth is, chain abstraction isn't solving a current problem as much as it's *preparing to solve a future problem*.** 57 | 58 | ## **The Appchain Thesis** 59 | 60 | We've all heard the "too much infra, not enough apps" claim one too many times. The reason for this is that protocol-specific growth metrics are glorified, and application-specific metrics are not. 61 | Why would anyone build a consumer app when TVL is the only thing that matters? 62 | 63 | ***TVL is a legacy metric;*** along with many other KPIs measured by general-purpose chains. 64 | 65 | As more and more apps become appchains, there is going to be a merge between infra and apps such that they are considered the same thing. Apps will no longer be deployed ***on*** chains, they will deploy ***as*** chains. 66 | 67 | In this future, liquidity MUST freely flow seamlessly between many chains at once. 68 | 69 | When Uniswap becomes an appchain, users need to easily and cheaply be able to move onto that chain, execute their swap, then move off and back to whatever SocialFi appchain they were previously using. 70 | 71 | This is what our crypto future will soon look like; this is the crypto future chain abstraction is solving for. 72 | 73 | The appchain thesis needs to become best friends with the chain abstraction narrative. 74 | *The chain abstraction narrative needs the appchain thesis, and vice versa.* 75 | 76 | If we're going to see *true* mass adoption (meaning billions of daily users), applications should not share blockspace with other apps. 77 | Customize your execution layer, own your blockspace, and make stickier applications because of it. Then use Chain Abstraction to help your appchain reach the world. 78 | 79 | This is the way forward. 80 | 81 | # **Conclusion** 82 | 83 | Though true that no one is asking for it, Chain Abstraction is beating the inevitable Appchain thesis to the punch. 84 | But in order for appchains to be viable, we need to change our way of thinking. 85 | 86 | ***I am pleading you to stop making protocol-stickiness the goal.*** 87 | 88 | Successful consumer crypto apps hardly exist because, to users, they all just look like new ways to use a blockchain. The blockchain smell is horrid and inconvenient. 89 | 90 | To reduce the blockchain smell, and still be onchain, consumer apps should launch as appchains. 91 | But in order to do that, chain abstraction is necessary. 92 | 93 | Let's make application-stickiness our goal once again, and create great infra to empower developers to *build sticky applications*. 94 | 95 | # **Shameless Plug** 96 | 97 | At [@monea_xyz](https://x.com/@monea_xyz), we're doing just that. 98 | 99 | The Appchain Thesis is going to birth a new class of developer: The Appchain Developer. 100 | 101 | This new role will require new ways of thinking, new technical skillsets, and, thus, **new tooling**. 102 | 103 | So we're building [@monea_xyz](https://x.com/@monea_xyz), the Appchain platform with managed infrastructure and *developer tooling* that makes launching custom, application-specific rollups easier. 104 | 105 | And we're partnering with various Chain Abstraction protocols to ensure appchain developers can build sticky onchain applications. 106 | 107 | If you'd like to partner with us, invest in the idea, or join the private builders telegram, send me a DM or email at jacob@monea.xyz. 🫡 -------------------------------------------------------------------------------- /src/main.rs: -------------------------------------------------------------------------------- 1 | use chrono::NaiveDateTime; 2 | use comrak::{markdown_to_html, ComrakOptions}; 3 | use html_parser::{Dom, Node}; 4 | use serde::Deserialize; 5 | use serde::Serialize; 6 | use std::error::Error; 7 | use std::fs::{self, File}; 8 | use std::io::Write; 9 | use std::path::{Path, PathBuf}; 10 | use tera::{Context, Tera}; 11 | use walkdir::WalkDir; 12 | 13 | #[derive(Deserialize, Debug)] 14 | struct FrontMatter { 15 | title: String, 16 | date: String, 17 | description: Option, 18 | tags: Option>, 19 | slug: String, 20 | } 21 | 22 | #[derive(Serialize)] 23 | struct Post { 24 | title: String, 25 | date: NaiveDateTime, 26 | description: Option, 27 | tags: Option>, 28 | content: String, 29 | slug: String, 30 | } 31 | 32 | impl Post { 33 | fn get_meta_description(&self) -> String { 34 | self.description.clone().unwrap_or_else(|| { 35 | // fallback to first 160 chars of content with stripped HTML 36 | let text = html2text::from_read(self.content.as_bytes(), 160).unwrap_or_default(); 37 | text.chars().take(160).collect::() 38 | }) 39 | } 40 | } 41 | 42 | fn main() { 43 | // create output directory 44 | if let Err(e) = fs::create_dir_all("dist") { 45 | eprintln!("failed to create dist directory: {}", e); 46 | return; 47 | } 48 | 49 | // copy static assets 50 | copy_static_files(); 51 | 52 | // process all markdown files 53 | let posts = process_markdown_files(); 54 | println!("Found {} posts", posts.len()); 55 | 56 | // process home.md separately 57 | let home_path = Path::new("content/home.md"); 58 | let home_content = match process_home_file(home_path) { 59 | Ok(content) => content, 60 | Err(e) => { 61 | eprintln!("error processing home.md: {}", e); 62 | String::from("

Welcome

") 63 | } 64 | }; 65 | 66 | // create template context 67 | let mut context = tera::Context::new(); 68 | context.insert("posts", &posts); 69 | context.insert("home_content", &home_content); 70 | 71 | // generate all HTML files 72 | generate_html_files(posts); 73 | } 74 | 75 | // TODO: rename to generate_posts 76 | fn process_markdown_files() -> Vec { 77 | let mut posts: Vec = Vec::new(); 78 | 79 | println!("searching for markdown files in content directory..."); 80 | 81 | for entry in WalkDir::new("content") 82 | .into_iter() 83 | .filter_entry(|e| !is_hidden(e)) 84 | .filter_map(|e| e.ok()) 85 | { 86 | // skip home.md 87 | if entry.file_name() == "home.md" { 88 | continue; 89 | } 90 | 91 | if entry.path().extension().map_or(false, |ext| ext == "md") { 92 | println!("found markdown file: {}", entry.path().display()); 93 | match process_markdown_file(entry.path()) { 94 | Ok(post) => { 95 | println!("successfully processed post: {}", post.title); 96 | posts.push(post); 97 | } 98 | Err(e) => eprintln!("error processing {}: {}", entry.path().display(), e), 99 | } 100 | } 101 | } 102 | 103 | println!("total posts found: {}", posts.len()); 104 | posts.sort_by(|a, b| b.date.cmp(&a.date)); 105 | posts 106 | } 107 | 108 | fn process_markdown_file(path: &Path) -> Result> { 109 | println!("reading file: {}", path.display()); 110 | let content = fs::read_to_string(path)?; 111 | 112 | // split front matter and content 113 | let parts: Vec<&str> = content.splitn(3, "---").collect(); 114 | if parts.len() != 3 { 115 | return Err("invalid markdown format - missing front matter".into()); 116 | } 117 | 118 | let front_matter: FrontMatter = serde_yaml::from_str(parts[1].trim())?; 119 | 120 | let html_content = markdown_to_html(parts[2].trim(), &ComrakOptions::default()); 121 | 122 | // Use the slug from front matter instead of generating from path 123 | let slug = front_matter.slug.clone(); 124 | 125 | println!("using slug from frontmatter: {}", slug); 126 | 127 | Ok(Post { 128 | title: front_matter.title, 129 | date: NaiveDateTime::parse_from_str( 130 | &(front_matter.date + " 00:00:00"), 131 | "%Y-%m-%d %H:%M:%S", 132 | )?, 133 | description: front_matter.description, 134 | tags: front_matter.tags, 135 | content: html_content, 136 | slug, 137 | }) 138 | } 139 | 140 | fn prettify_html(html: &str) -> String { 141 | let dom = Dom::parse(html).unwrap(); 142 | let mut result = String::new(); 143 | prettify_node(&dom.children, 0, &mut result); 144 | result 145 | } 146 | 147 | fn prettify_node(nodes: &[Node], indent: usize, result: &mut String) { 148 | for node in nodes { 149 | match node { 150 | Node::Element(element) => { 151 | result.push_str(&" ".repeat(indent)); 152 | result.push('<'); 153 | result.push_str(&element.name); 154 | 155 | for (key, value) in &element.attributes { 156 | result.push(' '); 157 | result.push_str(key); 158 | if let Some(val) = value { 159 | result.push_str("=\""); 160 | result.push_str(val); 161 | result.push('"'); 162 | } 163 | } 164 | 165 | if element.children.is_empty() && !needs_closing_tag(&element.name) { 166 | result.push_str("/>\n"); 167 | } else { 168 | result.push('>'); 169 | if !element.children.is_empty() { 170 | result.push('\n'); 171 | prettify_node(&element.children, indent + 1, result); 172 | result.push_str(&" ".repeat(indent)); 173 | } 174 | result.push_str("\n"); 177 | } 178 | } 179 | Node::Text(text) => { 180 | let trimmed = text.trim(); 181 | if !trimmed.is_empty() { 182 | result.push_str(&" ".repeat(indent)); 183 | result.push_str(trimmed); 184 | result.push('\n'); 185 | } 186 | } 187 | _ => {} 188 | } 189 | } 190 | } 191 | 192 | fn needs_closing_tag(tag: &str) -> bool { 193 | !["img", "br", "hr", "meta", "link", "input"].contains(&tag) 194 | } 195 | 196 | fn generate_html_files(posts: Vec) { 197 | let mut tera = match Tera::new("templates/**/*.html") { 198 | Ok(t) => t, 199 | Err(e) => { 200 | println!("Error parsing templates: {}", e); 201 | return; 202 | } 203 | }; 204 | 205 | // add custom date filter 206 | tera.register_filter( 207 | "date", 208 | |value: &tera::Value, args: &std::collections::HashMap| { 209 | if let Some(date) = value.as_str() { 210 | if let Some(format) = args.get("format").and_then(|f| f.as_str()) { 211 | if let Ok(parsed_date) = 212 | NaiveDateTime::parse_from_str(date, "%Y-%m-%d %H:%M:%S") 213 | { 214 | return Ok(parsed_date.format(format).to_string().into()); 215 | } 216 | } 217 | } 218 | Ok(value.clone()) 219 | }, 220 | ); 221 | 222 | // add split filter 223 | tera.register_filter( 224 | "split", 225 | |value: &tera::Value, args: &std::collections::HashMap| { 226 | if let Some(s) = value.as_str() { 227 | if let Some(pat) = args.get("pat").and_then(|p| p.as_str()) { 228 | let parts: Vec = s.split(pat).map(|p| p.into()).collect(); 229 | return Ok(tera::Value::Array(parts)); 230 | } 231 | } 232 | Ok(value.clone()) 233 | }, 234 | ); 235 | 236 | // Create base posts directory 237 | fs::create_dir_all("dist/posts").unwrap(); 238 | 239 | // generate individual post pages 240 | for post in &posts { 241 | let mut context = Context::new(); 242 | context.insert("post", post); 243 | context.insert("meta_description", &post.get_meta_description()); 244 | 245 | let html = tera.render("post.html", &context).unwrap(); 246 | let prettified_html = prettify_html(&html); 247 | 248 | // construct output path using the slug from frontmatter 249 | let output_path = format!("dist/posts/{}.html", post.slug); 250 | 251 | // ensure the parent directories exist 252 | if let Some(parent) = Path::new(&output_path).parent() { 253 | fs::create_dir_all(parent).unwrap(); 254 | } 255 | 256 | let mut file = File::create(output_path).unwrap(); 257 | file.write_all(prettified_html.as_bytes()).unwrap(); 258 | } 259 | 260 | // process home.md and generate index page 261 | let home_path = Path::new("content/home.md"); 262 | let home_content = match process_home_file(home_path) { 263 | Ok(content) => content, 264 | Err(e) => { 265 | eprintln!("error processing home.md: {}", e); 266 | String::from("

Welcome

") 267 | } 268 | }; 269 | 270 | let mut context = Context::new(); 271 | context.insert("posts", &posts); 272 | context.insert("home_content", &home_content); 273 | 274 | let html = tera.render("index.html", &context).unwrap(); 275 | let prettified_html = prettify_html(&html); 276 | let mut file = File::create("dist/index.html").unwrap(); 277 | file.write_all(prettified_html.as_bytes()).unwrap(); 278 | } 279 | 280 | fn copy_static_files() { 281 | for entry in WalkDir::new("static").into_iter().filter_map(|e| e.ok()) { 282 | if entry.file_type().is_file() { 283 | let path = entry.path(); 284 | let relative = path.strip_prefix("static").unwrap(); 285 | let dest = Path::new("dist").join(relative); 286 | 287 | if let Some(parent) = dest.parent() { 288 | fs::create_dir_all(parent).unwrap(); 289 | } 290 | 291 | fs::copy(path, dest).unwrap(); 292 | } 293 | } 294 | } 295 | 296 | fn is_hidden(entry: &walkdir::DirEntry) -> bool { 297 | entry 298 | .file_name() 299 | .to_str() 300 | .map(|s| s.starts_with(".")) 301 | .unwrap_or(false) 302 | } 303 | 304 | fn process_home_file(path: &Path) -> Result> { 305 | let content = fs::read_to_string(path)?; 306 | 307 | // split front matter and content 308 | let parts: Vec<&str> = content.splitn(3, "---").collect(); 309 | if parts.len() != 3 { 310 | return Err("Invalid markdown format - missing front matter".into()); 311 | } 312 | 313 | // parse front matter to validate date format 314 | let front_matter: FrontMatter = serde_yaml::from_str(parts[1].trim())?; 315 | 316 | // convert markdown to html 317 | let html_content = markdown_to_html(parts[2].trim(), &ComrakOptions::default()); 318 | 319 | Ok(html_content) 320 | } 321 | -------------------------------------------------------------------------------- /Cargo.lock: -------------------------------------------------------------------------------- 1 | # This file is automatically @generated by Cargo. 2 | # It is not intended for manual editing. 3 | version = 3 4 | 5 | [[package]] 6 | name = "actix-codec" 7 | version = "0.5.2" 8 | source = "registry+https://github.com/rust-lang/crates.io-index" 9 | checksum = "5f7b0a21988c1bf877cf4759ef5ddaac04c1c9fe808c9142ecb78ba97d97a28a" 10 | dependencies = [ 11 | "bitflags 2.6.0", 12 | "bytes", 13 | "futures-core", 14 | "futures-sink", 15 | "memchr", 16 | "pin-project-lite", 17 | "tokio", 18 | "tokio-util", 19 | "tracing", 20 | ] 21 | 22 | [[package]] 23 | name = "actix-files" 24 | version = "0.6.6" 25 | source = "registry+https://github.com/rust-lang/crates.io-index" 26 | checksum = "0773d59061dedb49a8aed04c67291b9d8cf2fe0b60130a381aab53c6dd86e9be" 27 | dependencies = [ 28 | "actix-http", 29 | "actix-service", 30 | "actix-utils", 31 | "actix-web", 32 | "bitflags 2.6.0", 33 | "bytes", 34 | "derive_more", 35 | "futures-core", 36 | "http-range", 37 | "log", 38 | "mime", 39 | "mime_guess", 40 | "percent-encoding", 41 | "pin-project-lite", 42 | "v_htmlescape", 43 | ] 44 | 45 | [[package]] 46 | name = "actix-http" 47 | version = "3.9.0" 48 | source = "registry+https://github.com/rust-lang/crates.io-index" 49 | checksum = "d48f96fc3003717aeb9856ca3d02a8c7de502667ad76eeacd830b48d2e91fac4" 50 | dependencies = [ 51 | "actix-codec", 52 | "actix-rt", 53 | "actix-service", 54 | "actix-utils", 55 | "ahash", 56 | "base64", 57 | "bitflags 2.6.0", 58 | "brotli", 59 | "bytes", 60 | "bytestring", 61 | "derive_more", 62 | "encoding_rs", 63 | "flate2", 64 | "futures-core", 65 | "h2", 66 | "http", 67 | "httparse", 68 | "httpdate", 69 | "itoa", 70 | "language-tags", 71 | "local-channel", 72 | "mime", 73 | "percent-encoding", 74 | "pin-project-lite", 75 | "rand", 76 | "sha1", 77 | "smallvec", 78 | "tokio", 79 | "tokio-util", 80 | "tracing", 81 | "zstd", 82 | ] 83 | 84 | [[package]] 85 | name = "actix-macros" 86 | version = "0.2.4" 87 | source = "registry+https://github.com/rust-lang/crates.io-index" 88 | checksum = "e01ed3140b2f8d422c68afa1ed2e85d996ea619c988ac834d255db32138655cb" 89 | dependencies = [ 90 | "quote", 91 | "syn", 92 | ] 93 | 94 | [[package]] 95 | name = "actix-router" 96 | version = "0.5.3" 97 | source = "registry+https://github.com/rust-lang/crates.io-index" 98 | checksum = "13d324164c51f63867b57e73ba5936ea151b8a41a1d23d1031eeb9f70d0236f8" 99 | dependencies = [ 100 | "bytestring", 101 | "cfg-if", 102 | "http", 103 | "regex", 104 | "regex-lite", 105 | "serde", 106 | "tracing", 107 | ] 108 | 109 | [[package]] 110 | name = "actix-rt" 111 | version = "2.10.0" 112 | source = "registry+https://github.com/rust-lang/crates.io-index" 113 | checksum = "24eda4e2a6e042aa4e55ac438a2ae052d3b5da0ecf83d7411e1a368946925208" 114 | dependencies = [ 115 | "futures-core", 116 | "tokio", 117 | ] 118 | 119 | [[package]] 120 | name = "actix-server" 121 | version = "2.5.0" 122 | source = "registry+https://github.com/rust-lang/crates.io-index" 123 | checksum = "7ca2549781d8dd6d75c40cf6b6051260a2cc2f3c62343d761a969a0640646894" 124 | dependencies = [ 125 | "actix-rt", 126 | "actix-service", 127 | "actix-utils", 128 | "futures-core", 129 | "futures-util", 130 | "mio", 131 | "socket2", 132 | "tokio", 133 | "tracing", 134 | ] 135 | 136 | [[package]] 137 | name = "actix-service" 138 | version = "2.0.2" 139 | source = "registry+https://github.com/rust-lang/crates.io-index" 140 | checksum = "3b894941f818cfdc7ccc4b9e60fa7e53b5042a2e8567270f9147d5591893373a" 141 | dependencies = [ 142 | "futures-core", 143 | "paste", 144 | "pin-project-lite", 145 | ] 146 | 147 | [[package]] 148 | name = "actix-utils" 149 | version = "3.0.1" 150 | source = "registry+https://github.com/rust-lang/crates.io-index" 151 | checksum = "88a1dcdff1466e3c2488e1cb5c36a71822750ad43839937f85d2f4d9f8b705d8" 152 | dependencies = [ 153 | "local-waker", 154 | "pin-project-lite", 155 | ] 156 | 157 | [[package]] 158 | name = "actix-web" 159 | version = "4.9.0" 160 | source = "registry+https://github.com/rust-lang/crates.io-index" 161 | checksum = "9180d76e5cc7ccbc4d60a506f2c727730b154010262df5b910eb17dbe4b8cb38" 162 | dependencies = [ 163 | "actix-codec", 164 | "actix-http", 165 | "actix-macros", 166 | "actix-router", 167 | "actix-rt", 168 | "actix-server", 169 | "actix-service", 170 | "actix-utils", 171 | "actix-web-codegen", 172 | "ahash", 173 | "bytes", 174 | "bytestring", 175 | "cfg-if", 176 | "cookie", 177 | "derive_more", 178 | "encoding_rs", 179 | "futures-core", 180 | "futures-util", 181 | "impl-more", 182 | "itoa", 183 | "language-tags", 184 | "log", 185 | "mime", 186 | "once_cell", 187 | "pin-project-lite", 188 | "regex", 189 | "regex-lite", 190 | "serde", 191 | "serde_json", 192 | "serde_urlencoded", 193 | "smallvec", 194 | "socket2", 195 | "time", 196 | "url", 197 | ] 198 | 199 | [[package]] 200 | name = "actix-web-codegen" 201 | version = "4.3.0" 202 | source = "registry+https://github.com/rust-lang/crates.io-index" 203 | checksum = "f591380e2e68490b5dfaf1dd1aa0ebe78d84ba7067078512b4ea6e4492d622b8" 204 | dependencies = [ 205 | "actix-router", 206 | "proc-macro2", 207 | "quote", 208 | "syn", 209 | ] 210 | 211 | [[package]] 212 | name = "addr2line" 213 | version = "0.24.2" 214 | source = "registry+https://github.com/rust-lang/crates.io-index" 215 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1" 216 | dependencies = [ 217 | "gimli", 218 | ] 219 | 220 | [[package]] 221 | name = "adler2" 222 | version = "2.0.0" 223 | source = "registry+https://github.com/rust-lang/crates.io-index" 224 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627" 225 | 226 | [[package]] 227 | name = "ahash" 228 | version = "0.8.11" 229 | source = "registry+https://github.com/rust-lang/crates.io-index" 230 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" 231 | dependencies = [ 232 | "cfg-if", 233 | "getrandom", 234 | "once_cell", 235 | "version_check", 236 | "zerocopy", 237 | ] 238 | 239 | [[package]] 240 | name = "aho-corasick" 241 | version = "1.1.3" 242 | source = "registry+https://github.com/rust-lang/crates.io-index" 243 | checksum = "8e60d3430d3a69478ad0993f19238d2df97c507009a52b3c10addcd7f6bcb916" 244 | dependencies = [ 245 | "memchr", 246 | ] 247 | 248 | [[package]] 249 | name = "alloc-no-stdlib" 250 | version = "2.0.4" 251 | source = "registry+https://github.com/rust-lang/crates.io-index" 252 | checksum = "cc7bb162ec39d46ab1ca8c77bf72e890535becd1751bb45f64c597edb4c8c6b3" 253 | 254 | [[package]] 255 | name = "alloc-stdlib" 256 | version = "0.2.2" 257 | source = "registry+https://github.com/rust-lang/crates.io-index" 258 | checksum = "94fb8275041c72129eb51b7d0322c29b8387a0386127718b096429201a5d6ece" 259 | dependencies = [ 260 | "alloc-no-stdlib", 261 | ] 262 | 263 | [[package]] 264 | name = "android-tzdata" 265 | version = "0.1.1" 266 | source = "registry+https://github.com/rust-lang/crates.io-index" 267 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0" 268 | 269 | [[package]] 270 | name = "android_system_properties" 271 | version = "0.1.5" 272 | source = "registry+https://github.com/rust-lang/crates.io-index" 273 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311" 274 | dependencies = [ 275 | "libc", 276 | ] 277 | 278 | [[package]] 279 | name = "anstream" 280 | version = "0.6.18" 281 | source = "registry+https://github.com/rust-lang/crates.io-index" 282 | checksum = "8acc5369981196006228e28809f761875c0327210a891e941f4c683b3a99529b" 283 | dependencies = [ 284 | "anstyle", 285 | "anstyle-parse", 286 | "anstyle-query", 287 | "anstyle-wincon", 288 | "colorchoice", 289 | "is_terminal_polyfill", 290 | "utf8parse", 291 | ] 292 | 293 | [[package]] 294 | name = "anstyle" 295 | version = "1.0.10" 296 | source = "registry+https://github.com/rust-lang/crates.io-index" 297 | checksum = "55cc3b69f167a1ef2e161439aa98aed94e6028e5f9a59be9a6ffb47aef1651f9" 298 | 299 | [[package]] 300 | name = "anstyle-parse" 301 | version = "0.2.6" 302 | source = "registry+https://github.com/rust-lang/crates.io-index" 303 | checksum = "3b2d16507662817a6a20a9ea92df6652ee4f94f914589377d69f3b21bc5798a9" 304 | dependencies = [ 305 | "utf8parse", 306 | ] 307 | 308 | [[package]] 309 | name = "anstyle-query" 310 | version = "1.1.2" 311 | source = "registry+https://github.com/rust-lang/crates.io-index" 312 | checksum = "79947af37f4177cfead1110013d678905c37501914fba0efea834c3fe9a8d60c" 313 | dependencies = [ 314 | "windows-sys 0.59.0", 315 | ] 316 | 317 | [[package]] 318 | name = "anstyle-wincon" 319 | version = "3.0.6" 320 | source = "registry+https://github.com/rust-lang/crates.io-index" 321 | checksum = "2109dbce0e72be3ec00bed26e6a7479ca384ad226efdd66db8fa2e3a38c83125" 322 | dependencies = [ 323 | "anstyle", 324 | "windows-sys 0.59.0", 325 | ] 326 | 327 | [[package]] 328 | name = "autocfg" 329 | version = "1.4.0" 330 | source = "registry+https://github.com/rust-lang/crates.io-index" 331 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26" 332 | 333 | [[package]] 334 | name = "backtrace" 335 | version = "0.3.74" 336 | source = "registry+https://github.com/rust-lang/crates.io-index" 337 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a" 338 | dependencies = [ 339 | "addr2line", 340 | "cfg-if", 341 | "libc", 342 | "miniz_oxide", 343 | "object", 344 | "rustc-demangle", 345 | "windows-targets", 346 | ] 347 | 348 | [[package]] 349 | name = "base64" 350 | version = "0.22.1" 351 | source = "registry+https://github.com/rust-lang/crates.io-index" 352 | checksum = "72b3254f16251a8381aa12e40e3c4d2f0199f8c6508fbecb9d91f575e0fbb8c6" 353 | 354 | [[package]] 355 | name = "bincode" 356 | version = "1.3.3" 357 | source = "registry+https://github.com/rust-lang/crates.io-index" 358 | checksum = "b1f45e9417d87227c7a56d22e471c6206462cba514c7590c09aff4cf6d1ddcad" 359 | dependencies = [ 360 | "serde", 361 | ] 362 | 363 | [[package]] 364 | name = "bit-set" 365 | version = "0.5.3" 366 | source = "registry+https://github.com/rust-lang/crates.io-index" 367 | checksum = "0700ddab506f33b20a03b13996eccd309a48e5ff77d0d95926aa0210fb4e95f1" 368 | dependencies = [ 369 | "bit-vec", 370 | ] 371 | 372 | [[package]] 373 | name = "bit-vec" 374 | version = "0.6.3" 375 | source = "registry+https://github.com/rust-lang/crates.io-index" 376 | checksum = "349f9b6a179ed607305526ca489b34ad0a41aed5f7980fa90eb03160b69598fb" 377 | 378 | [[package]] 379 | name = "bitflags" 380 | version = "1.3.2" 381 | source = "registry+https://github.com/rust-lang/crates.io-index" 382 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" 383 | 384 | [[package]] 385 | name = "bitflags" 386 | version = "2.6.0" 387 | source = "registry+https://github.com/rust-lang/crates.io-index" 388 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" 389 | 390 | [[package]] 391 | name = "block-buffer" 392 | version = "0.10.4" 393 | source = "registry+https://github.com/rust-lang/crates.io-index" 394 | checksum = "3078c7629b62d3f0439517fa394996acacc5cbc91c5a20d8c658e77abd503a71" 395 | dependencies = [ 396 | "generic-array", 397 | ] 398 | 399 | [[package]] 400 | name = "brotli" 401 | version = "6.0.0" 402 | source = "registry+https://github.com/rust-lang/crates.io-index" 403 | checksum = "74f7971dbd9326d58187408ab83117d8ac1bb9c17b085fdacd1cf2f598719b6b" 404 | dependencies = [ 405 | "alloc-no-stdlib", 406 | "alloc-stdlib", 407 | "brotli-decompressor", 408 | ] 409 | 410 | [[package]] 411 | name = "brotli-decompressor" 412 | version = "4.0.1" 413 | source = "registry+https://github.com/rust-lang/crates.io-index" 414 | checksum = "9a45bd2e4095a8b518033b128020dd4a55aab1c0a381ba4404a472630f4bc362" 415 | dependencies = [ 416 | "alloc-no-stdlib", 417 | "alloc-stdlib", 418 | ] 419 | 420 | [[package]] 421 | name = "bstr" 422 | version = "1.11.1" 423 | source = "registry+https://github.com/rust-lang/crates.io-index" 424 | checksum = "786a307d683a5bf92e6fd5fd69a7eb613751668d1d8d67d802846dfe367c62c8" 425 | dependencies = [ 426 | "memchr", 427 | "serde", 428 | ] 429 | 430 | [[package]] 431 | name = "bumpalo" 432 | version = "3.16.0" 433 | source = "registry+https://github.com/rust-lang/crates.io-index" 434 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c" 435 | 436 | [[package]] 437 | name = "byteorder" 438 | version = "1.5.0" 439 | source = "registry+https://github.com/rust-lang/crates.io-index" 440 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" 441 | 442 | [[package]] 443 | name = "bytes" 444 | version = "1.9.0" 445 | source = "registry+https://github.com/rust-lang/crates.io-index" 446 | checksum = "325918d6fe32f23b19878fe4b34794ae41fc19ddbe53b10571a4874d44ffd39b" 447 | 448 | [[package]] 449 | name = "bytestring" 450 | version = "1.4.0" 451 | source = "registry+https://github.com/rust-lang/crates.io-index" 452 | checksum = "e465647ae23b2823b0753f50decb2d5a86d2bb2cac04788fafd1f80e45378e5f" 453 | dependencies = [ 454 | "bytes", 455 | ] 456 | 457 | [[package]] 458 | name = "cc" 459 | version = "1.2.4" 460 | source = "registry+https://github.com/rust-lang/crates.io-index" 461 | checksum = "9157bbaa6b165880c27a4293a474c91cdcf265cc68cc829bf10be0964a391caf" 462 | dependencies = [ 463 | "jobserver", 464 | "libc", 465 | "shlex", 466 | ] 467 | 468 | [[package]] 469 | name = "cfg-if" 470 | version = "1.0.0" 471 | source = "registry+https://github.com/rust-lang/crates.io-index" 472 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" 473 | 474 | [[package]] 475 | name = "chrono" 476 | version = "0.4.39" 477 | source = "registry+https://github.com/rust-lang/crates.io-index" 478 | checksum = "7e36cc9d416881d2e24f9a963be5fb1cd90966419ac844274161d10488b3e825" 479 | dependencies = [ 480 | "android-tzdata", 481 | "iana-time-zone", 482 | "js-sys", 483 | "num-traits", 484 | "serde", 485 | "wasm-bindgen", 486 | "windows-targets", 487 | ] 488 | 489 | [[package]] 490 | name = "chrono-tz" 491 | version = "0.9.0" 492 | source = "registry+https://github.com/rust-lang/crates.io-index" 493 | checksum = "93698b29de5e97ad0ae26447b344c482a7284c737d9ddc5f9e52b74a336671bb" 494 | dependencies = [ 495 | "chrono", 496 | "chrono-tz-build", 497 | "phf", 498 | ] 499 | 500 | [[package]] 501 | name = "chrono-tz-build" 502 | version = "0.3.0" 503 | source = "registry+https://github.com/rust-lang/crates.io-index" 504 | checksum = "0c088aee841df9c3041febbb73934cfc39708749bf96dc827e3359cd39ef11b1" 505 | dependencies = [ 506 | "parse-zoneinfo", 507 | "phf", 508 | "phf_codegen", 509 | ] 510 | 511 | [[package]] 512 | name = "clap" 513 | version = "4.5.23" 514 | source = "registry+https://github.com/rust-lang/crates.io-index" 515 | checksum = "3135e7ec2ef7b10c6ed8950f0f792ed96ee093fa088608f1c76e569722700c84" 516 | dependencies = [ 517 | "clap_builder", 518 | "clap_derive", 519 | ] 520 | 521 | [[package]] 522 | name = "clap_builder" 523 | version = "4.5.23" 524 | source = "registry+https://github.com/rust-lang/crates.io-index" 525 | checksum = "30582fc632330df2bd26877bde0c1f4470d57c582bbc070376afcd04d8cb4838" 526 | dependencies = [ 527 | "anstream", 528 | "anstyle", 529 | "clap_lex", 530 | "strsim", 531 | "terminal_size", 532 | ] 533 | 534 | [[package]] 535 | name = "clap_derive" 536 | version = "4.5.18" 537 | source = "registry+https://github.com/rust-lang/crates.io-index" 538 | checksum = "4ac6a0c7b1a9e9a5186361f67dfa1b88213572f427fb9ab038efb2bd8c582dab" 539 | dependencies = [ 540 | "heck", 541 | "proc-macro2", 542 | "quote", 543 | "syn", 544 | ] 545 | 546 | [[package]] 547 | name = "clap_lex" 548 | version = "0.7.4" 549 | source = "registry+https://github.com/rust-lang/crates.io-index" 550 | checksum = "f46ad14479a25103f283c0f10005961cf086d8dc42205bb44c46ac563475dca6" 551 | 552 | [[package]] 553 | name = "colorchoice" 554 | version = "1.0.3" 555 | source = "registry+https://github.com/rust-lang/crates.io-index" 556 | checksum = "5b63caa9aa9397e2d9480a9b13673856c78d8ac123288526c37d7839f2a86990" 557 | 558 | [[package]] 559 | name = "comrak" 560 | version = "0.18.0" 561 | source = "registry+https://github.com/rust-lang/crates.io-index" 562 | checksum = "482aa5695bca086022be453c700a40c02893f1ba7098a2c88351de55341ae894" 563 | dependencies = [ 564 | "clap", 565 | "entities", 566 | "memchr", 567 | "once_cell", 568 | "regex", 569 | "shell-words", 570 | "slug", 571 | "syntect", 572 | "typed-arena", 573 | "unicode_categories", 574 | "xdg", 575 | ] 576 | 577 | [[package]] 578 | name = "convert_case" 579 | version = "0.4.0" 580 | source = "registry+https://github.com/rust-lang/crates.io-index" 581 | checksum = "6245d59a3e82a7fc217c5828a6692dbc6dfb63a0c8c90495621f7b9d79704a0e" 582 | 583 | [[package]] 584 | name = "cookie" 585 | version = "0.16.2" 586 | source = "registry+https://github.com/rust-lang/crates.io-index" 587 | checksum = "e859cd57d0710d9e06c381b550c06e76992472a8c6d527aecd2fc673dcc231fb" 588 | dependencies = [ 589 | "percent-encoding", 590 | "time", 591 | "version_check", 592 | ] 593 | 594 | [[package]] 595 | name = "core-foundation-sys" 596 | version = "0.8.7" 597 | source = "registry+https://github.com/rust-lang/crates.io-index" 598 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" 599 | 600 | [[package]] 601 | name = "cpufeatures" 602 | version = "0.2.16" 603 | source = "registry+https://github.com/rust-lang/crates.io-index" 604 | checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" 605 | dependencies = [ 606 | "libc", 607 | ] 608 | 609 | [[package]] 610 | name = "crc32fast" 611 | version = "1.4.2" 612 | source = "registry+https://github.com/rust-lang/crates.io-index" 613 | checksum = "a97769d94ddab943e4510d138150169a2758b5ef3eb191a9ee688de3e23ef7b3" 614 | dependencies = [ 615 | "cfg-if", 616 | ] 617 | 618 | [[package]] 619 | name = "crossbeam-deque" 620 | version = "0.8.6" 621 | source = "registry+https://github.com/rust-lang/crates.io-index" 622 | checksum = "9dd111b7b7f7d55b72c0a6ae361660ee5853c9af73f70c3c2ef6858b950e2e51" 623 | dependencies = [ 624 | "crossbeam-epoch", 625 | "crossbeam-utils", 626 | ] 627 | 628 | [[package]] 629 | name = "crossbeam-epoch" 630 | version = "0.9.18" 631 | source = "registry+https://github.com/rust-lang/crates.io-index" 632 | checksum = "5b82ac4a3c2ca9c3460964f020e1402edd5753411d7737aa39c3714ad1b5420e" 633 | dependencies = [ 634 | "crossbeam-utils", 635 | ] 636 | 637 | [[package]] 638 | name = "crossbeam-utils" 639 | version = "0.8.21" 640 | source = "registry+https://github.com/rust-lang/crates.io-index" 641 | checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" 642 | 643 | [[package]] 644 | name = "crypto-common" 645 | version = "0.1.6" 646 | source = "registry+https://github.com/rust-lang/crates.io-index" 647 | checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" 648 | dependencies = [ 649 | "generic-array", 650 | "typenum", 651 | ] 652 | 653 | [[package]] 654 | name = "deranged" 655 | version = "0.3.11" 656 | source = "registry+https://github.com/rust-lang/crates.io-index" 657 | checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4" 658 | dependencies = [ 659 | "powerfmt", 660 | ] 661 | 662 | [[package]] 663 | name = "derive_more" 664 | version = "0.99.18" 665 | source = "registry+https://github.com/rust-lang/crates.io-index" 666 | checksum = "5f33878137e4dafd7fa914ad4e259e18a4e8e532b9617a2d0150262bf53abfce" 667 | dependencies = [ 668 | "convert_case", 669 | "proc-macro2", 670 | "quote", 671 | "rustc_version", 672 | "syn", 673 | ] 674 | 675 | [[package]] 676 | name = "deunicode" 677 | version = "1.6.0" 678 | source = "registry+https://github.com/rust-lang/crates.io-index" 679 | checksum = "339544cc9e2c4dc3fc7149fd630c5f22263a4fdf18a98afd0075784968b5cf00" 680 | 681 | [[package]] 682 | name = "digest" 683 | version = "0.10.7" 684 | source = "registry+https://github.com/rust-lang/crates.io-index" 685 | checksum = "9ed9a281f7bc9b7576e61468ba615a66a5c8cfdff42420a70aa82701a3b1e292" 686 | dependencies = [ 687 | "block-buffer", 688 | "crypto-common", 689 | ] 690 | 691 | [[package]] 692 | name = "displaydoc" 693 | version = "0.2.5" 694 | source = "registry+https://github.com/rust-lang/crates.io-index" 695 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0" 696 | dependencies = [ 697 | "proc-macro2", 698 | "quote", 699 | "syn", 700 | ] 701 | 702 | [[package]] 703 | name = "doc-comment" 704 | version = "0.3.3" 705 | source = "registry+https://github.com/rust-lang/crates.io-index" 706 | checksum = "fea41bba32d969b513997752735605054bc0dfa92b4c56bf1189f2e174be7a10" 707 | 708 | [[package]] 709 | name = "encoding_rs" 710 | version = "0.8.35" 711 | source = "registry+https://github.com/rust-lang/crates.io-index" 712 | checksum = "75030f3c4f45dafd7586dd6780965a8c7e8e285a5ecb86713e63a79c5b2766f3" 713 | dependencies = [ 714 | "cfg-if", 715 | ] 716 | 717 | [[package]] 718 | name = "entities" 719 | version = "1.0.1" 720 | source = "registry+https://github.com/rust-lang/crates.io-index" 721 | checksum = "b5320ae4c3782150d900b79807611a59a99fc9a1d61d686faafc24b93fc8d7ca" 722 | 723 | [[package]] 724 | name = "env_logger" 725 | version = "0.10.2" 726 | source = "registry+https://github.com/rust-lang/crates.io-index" 727 | checksum = "4cd405aab171cb85d6735e5c8d9db038c17d3ca007a4d2c25f337935c3d90580" 728 | dependencies = [ 729 | "humantime", 730 | "is-terminal", 731 | "log", 732 | "regex", 733 | "termcolor", 734 | ] 735 | 736 | [[package]] 737 | name = "equivalent" 738 | version = "1.0.1" 739 | source = "registry+https://github.com/rust-lang/crates.io-index" 740 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5" 741 | 742 | [[package]] 743 | name = "errno" 744 | version = "0.3.10" 745 | source = "registry+https://github.com/rust-lang/crates.io-index" 746 | checksum = "33d852cb9b869c2a9b3df2f71a3074817f01e1844f839a144f5fcef059a4eb5d" 747 | dependencies = [ 748 | "libc", 749 | "windows-sys 0.59.0", 750 | ] 751 | 752 | [[package]] 753 | name = "fancy-regex" 754 | version = "0.11.0" 755 | source = "registry+https://github.com/rust-lang/crates.io-index" 756 | checksum = "b95f7c0680e4142284cf8b22c14a476e87d61b004a3a0861872b32ef7ead40a2" 757 | dependencies = [ 758 | "bit-set", 759 | "regex", 760 | ] 761 | 762 | [[package]] 763 | name = "flate2" 764 | version = "1.0.35" 765 | source = "registry+https://github.com/rust-lang/crates.io-index" 766 | checksum = "c936bfdafb507ebbf50b8074c54fa31c5be9a1e7e5f467dd659697041407d07c" 767 | dependencies = [ 768 | "crc32fast", 769 | "miniz_oxide", 770 | ] 771 | 772 | [[package]] 773 | name = "fnv" 774 | version = "1.0.7" 775 | source = "registry+https://github.com/rust-lang/crates.io-index" 776 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1" 777 | 778 | [[package]] 779 | name = "form_urlencoded" 780 | version = "1.2.1" 781 | source = "registry+https://github.com/rust-lang/crates.io-index" 782 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456" 783 | dependencies = [ 784 | "percent-encoding", 785 | ] 786 | 787 | [[package]] 788 | name = "futf" 789 | version = "0.1.5" 790 | source = "registry+https://github.com/rust-lang/crates.io-index" 791 | checksum = "df420e2e84819663797d1ec6544b13c5be84629e7bb00dc960d6917db2987843" 792 | dependencies = [ 793 | "mac", 794 | "new_debug_unreachable", 795 | ] 796 | 797 | [[package]] 798 | name = "futures-core" 799 | version = "0.3.31" 800 | source = "registry+https://github.com/rust-lang/crates.io-index" 801 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e" 802 | 803 | [[package]] 804 | name = "futures-sink" 805 | version = "0.3.31" 806 | source = "registry+https://github.com/rust-lang/crates.io-index" 807 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7" 808 | 809 | [[package]] 810 | name = "futures-task" 811 | version = "0.3.31" 812 | source = "registry+https://github.com/rust-lang/crates.io-index" 813 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988" 814 | 815 | [[package]] 816 | name = "futures-util" 817 | version = "0.3.31" 818 | source = "registry+https://github.com/rust-lang/crates.io-index" 819 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81" 820 | dependencies = [ 821 | "futures-core", 822 | "futures-task", 823 | "pin-project-lite", 824 | "pin-utils", 825 | ] 826 | 827 | [[package]] 828 | name = "generic-array" 829 | version = "0.14.7" 830 | source = "registry+https://github.com/rust-lang/crates.io-index" 831 | checksum = "85649ca51fd72272d7821adaf274ad91c288277713d9c18820d8499a7ff69e9a" 832 | dependencies = [ 833 | "typenum", 834 | "version_check", 835 | ] 836 | 837 | [[package]] 838 | name = "getopts" 839 | version = "0.2.21" 840 | source = "registry+https://github.com/rust-lang/crates.io-index" 841 | checksum = "14dbbfd5c71d70241ecf9e6f13737f7b5ce823821063188d7e46c41d371eebd5" 842 | dependencies = [ 843 | "unicode-width 0.1.14", 844 | ] 845 | 846 | [[package]] 847 | name = "getrandom" 848 | version = "0.2.15" 849 | source = "registry+https://github.com/rust-lang/crates.io-index" 850 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7" 851 | dependencies = [ 852 | "cfg-if", 853 | "libc", 854 | "wasi", 855 | ] 856 | 857 | [[package]] 858 | name = "gimli" 859 | version = "0.31.1" 860 | source = "registry+https://github.com/rust-lang/crates.io-index" 861 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f" 862 | 863 | [[package]] 864 | name = "globset" 865 | version = "0.4.15" 866 | source = "registry+https://github.com/rust-lang/crates.io-index" 867 | checksum = "15f1ce686646e7f1e19bf7d5533fe443a45dbfb990e00629110797578b42fb19" 868 | dependencies = [ 869 | "aho-corasick", 870 | "bstr", 871 | "log", 872 | "regex-automata", 873 | "regex-syntax", 874 | ] 875 | 876 | [[package]] 877 | name = "globwalk" 878 | version = "0.9.1" 879 | source = "registry+https://github.com/rust-lang/crates.io-index" 880 | checksum = "0bf760ebf69878d9fd8f110c89703d90ce35095324d1f1edcb595c63945ee757" 881 | dependencies = [ 882 | "bitflags 2.6.0", 883 | "ignore", 884 | "walkdir", 885 | ] 886 | 887 | [[package]] 888 | name = "h2" 889 | version = "0.3.26" 890 | source = "registry+https://github.com/rust-lang/crates.io-index" 891 | checksum = "81fe527a889e1532da5c525686d96d4c2e74cdd345badf8dfef9f6b39dd5f5e8" 892 | dependencies = [ 893 | "bytes", 894 | "fnv", 895 | "futures-core", 896 | "futures-sink", 897 | "futures-util", 898 | "http", 899 | "indexmap", 900 | "slab", 901 | "tokio", 902 | "tokio-util", 903 | "tracing", 904 | ] 905 | 906 | [[package]] 907 | name = "hashbrown" 908 | version = "0.15.2" 909 | source = "registry+https://github.com/rust-lang/crates.io-index" 910 | checksum = "bf151400ff0baff5465007dd2f3e717f3fe502074ca563069ce3a6629d07b289" 911 | 912 | [[package]] 913 | name = "heck" 914 | version = "0.5.0" 915 | source = "registry+https://github.com/rust-lang/crates.io-index" 916 | checksum = "2304e00983f87ffb38b55b444b5e3b60a884b5d30c0fca7d82fe33449bbe55ea" 917 | 918 | [[package]] 919 | name = "hermit-abi" 920 | version = "0.4.0" 921 | source = "registry+https://github.com/rust-lang/crates.io-index" 922 | checksum = "fbf6a919d6cf397374f7dfeeea91d974c7c0a7221d0d0f4f20d859d329e53fcc" 923 | 924 | [[package]] 925 | name = "html2text" 926 | version = "0.13.5" 927 | source = "registry+https://github.com/rust-lang/crates.io-index" 928 | checksum = "68b2a77923bd16367f5d738c706b81b97ddb436c8ae863da5efc66599ef99552" 929 | dependencies = [ 930 | "html5ever", 931 | "markup5ever", 932 | "nom", 933 | "tendril", 934 | "thiserror 2.0.7", 935 | "unicode-width 0.2.0", 936 | ] 937 | 938 | [[package]] 939 | name = "html5ever" 940 | version = "0.29.0" 941 | source = "registry+https://github.com/rust-lang/crates.io-index" 942 | checksum = "2e15626aaf9c351bc696217cbe29cb9b5e86c43f8a46b5e2f5c6c5cf7cb904ce" 943 | dependencies = [ 944 | "log", 945 | "mac", 946 | "markup5ever", 947 | "proc-macro2", 948 | "quote", 949 | "syn", 950 | ] 951 | 952 | [[package]] 953 | name = "html_parser" 954 | version = "0.7.0" 955 | source = "registry+https://github.com/rust-lang/crates.io-index" 956 | checksum = "f6f56db07b6612644f6f7719f8ef944f75fff9d6378fdf3d316fd32194184abd" 957 | dependencies = [ 958 | "doc-comment", 959 | "pest", 960 | "pest_derive", 961 | "serde", 962 | "serde_derive", 963 | "serde_json", 964 | "thiserror 1.0.69", 965 | ] 966 | 967 | [[package]] 968 | name = "http" 969 | version = "0.2.12" 970 | source = "registry+https://github.com/rust-lang/crates.io-index" 971 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1" 972 | dependencies = [ 973 | "bytes", 974 | "fnv", 975 | "itoa", 976 | ] 977 | 978 | [[package]] 979 | name = "http-range" 980 | version = "0.1.5" 981 | source = "registry+https://github.com/rust-lang/crates.io-index" 982 | checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" 983 | 984 | [[package]] 985 | name = "httparse" 986 | version = "1.9.5" 987 | source = "registry+https://github.com/rust-lang/crates.io-index" 988 | checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946" 989 | 990 | [[package]] 991 | name = "httpdate" 992 | version = "1.0.3" 993 | source = "registry+https://github.com/rust-lang/crates.io-index" 994 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9" 995 | 996 | [[package]] 997 | name = "humansize" 998 | version = "2.1.3" 999 | source = "registry+https://github.com/rust-lang/crates.io-index" 1000 | checksum = "6cb51c9a029ddc91b07a787f1d86b53ccfa49b0e86688c946ebe8d3555685dd7" 1001 | dependencies = [ 1002 | "libm", 1003 | ] 1004 | 1005 | [[package]] 1006 | name = "humantime" 1007 | version = "2.1.0" 1008 | source = "registry+https://github.com/rust-lang/crates.io-index" 1009 | checksum = "9a3a5bfb195931eeb336b2a7b4d761daec841b97f947d34394601737a7bba5e4" 1010 | 1011 | [[package]] 1012 | name = "iana-time-zone" 1013 | version = "0.1.61" 1014 | source = "registry+https://github.com/rust-lang/crates.io-index" 1015 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220" 1016 | dependencies = [ 1017 | "android_system_properties", 1018 | "core-foundation-sys", 1019 | "iana-time-zone-haiku", 1020 | "js-sys", 1021 | "wasm-bindgen", 1022 | "windows-core", 1023 | ] 1024 | 1025 | [[package]] 1026 | name = "iana-time-zone-haiku" 1027 | version = "0.1.2" 1028 | source = "registry+https://github.com/rust-lang/crates.io-index" 1029 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f" 1030 | dependencies = [ 1031 | "cc", 1032 | ] 1033 | 1034 | [[package]] 1035 | name = "icu_collections" 1036 | version = "1.5.0" 1037 | source = "registry+https://github.com/rust-lang/crates.io-index" 1038 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526" 1039 | dependencies = [ 1040 | "displaydoc", 1041 | "yoke", 1042 | "zerofrom", 1043 | "zerovec", 1044 | ] 1045 | 1046 | [[package]] 1047 | name = "icu_locid" 1048 | version = "1.5.0" 1049 | source = "registry+https://github.com/rust-lang/crates.io-index" 1050 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637" 1051 | dependencies = [ 1052 | "displaydoc", 1053 | "litemap", 1054 | "tinystr", 1055 | "writeable", 1056 | "zerovec", 1057 | ] 1058 | 1059 | [[package]] 1060 | name = "icu_locid_transform" 1061 | version = "1.5.0" 1062 | source = "registry+https://github.com/rust-lang/crates.io-index" 1063 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e" 1064 | dependencies = [ 1065 | "displaydoc", 1066 | "icu_locid", 1067 | "icu_locid_transform_data", 1068 | "icu_provider", 1069 | "tinystr", 1070 | "zerovec", 1071 | ] 1072 | 1073 | [[package]] 1074 | name = "icu_locid_transform_data" 1075 | version = "1.5.0" 1076 | source = "registry+https://github.com/rust-lang/crates.io-index" 1077 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e" 1078 | 1079 | [[package]] 1080 | name = "icu_normalizer" 1081 | version = "1.5.0" 1082 | source = "registry+https://github.com/rust-lang/crates.io-index" 1083 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f" 1084 | dependencies = [ 1085 | "displaydoc", 1086 | "icu_collections", 1087 | "icu_normalizer_data", 1088 | "icu_properties", 1089 | "icu_provider", 1090 | "smallvec", 1091 | "utf16_iter", 1092 | "utf8_iter", 1093 | "write16", 1094 | "zerovec", 1095 | ] 1096 | 1097 | [[package]] 1098 | name = "icu_normalizer_data" 1099 | version = "1.5.0" 1100 | source = "registry+https://github.com/rust-lang/crates.io-index" 1101 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516" 1102 | 1103 | [[package]] 1104 | name = "icu_properties" 1105 | version = "1.5.1" 1106 | source = "registry+https://github.com/rust-lang/crates.io-index" 1107 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5" 1108 | dependencies = [ 1109 | "displaydoc", 1110 | "icu_collections", 1111 | "icu_locid_transform", 1112 | "icu_properties_data", 1113 | "icu_provider", 1114 | "tinystr", 1115 | "zerovec", 1116 | ] 1117 | 1118 | [[package]] 1119 | name = "icu_properties_data" 1120 | version = "1.5.0" 1121 | source = "registry+https://github.com/rust-lang/crates.io-index" 1122 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569" 1123 | 1124 | [[package]] 1125 | name = "icu_provider" 1126 | version = "1.5.0" 1127 | source = "registry+https://github.com/rust-lang/crates.io-index" 1128 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9" 1129 | dependencies = [ 1130 | "displaydoc", 1131 | "icu_locid", 1132 | "icu_provider_macros", 1133 | "stable_deref_trait", 1134 | "tinystr", 1135 | "writeable", 1136 | "yoke", 1137 | "zerofrom", 1138 | "zerovec", 1139 | ] 1140 | 1141 | [[package]] 1142 | name = "icu_provider_macros" 1143 | version = "1.5.0" 1144 | source = "registry+https://github.com/rust-lang/crates.io-index" 1145 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6" 1146 | dependencies = [ 1147 | "proc-macro2", 1148 | "quote", 1149 | "syn", 1150 | ] 1151 | 1152 | [[package]] 1153 | name = "idna" 1154 | version = "1.0.3" 1155 | source = "registry+https://github.com/rust-lang/crates.io-index" 1156 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e" 1157 | dependencies = [ 1158 | "idna_adapter", 1159 | "smallvec", 1160 | "utf8_iter", 1161 | ] 1162 | 1163 | [[package]] 1164 | name = "idna_adapter" 1165 | version = "1.2.0" 1166 | source = "registry+https://github.com/rust-lang/crates.io-index" 1167 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71" 1168 | dependencies = [ 1169 | "icu_normalizer", 1170 | "icu_properties", 1171 | ] 1172 | 1173 | [[package]] 1174 | name = "ignore" 1175 | version = "0.4.23" 1176 | source = "registry+https://github.com/rust-lang/crates.io-index" 1177 | checksum = "6d89fd380afde86567dfba715db065673989d6253f42b88179abd3eae47bda4b" 1178 | dependencies = [ 1179 | "crossbeam-deque", 1180 | "globset", 1181 | "log", 1182 | "memchr", 1183 | "regex-automata", 1184 | "same-file", 1185 | "walkdir", 1186 | "winapi-util", 1187 | ] 1188 | 1189 | [[package]] 1190 | name = "impl-more" 1191 | version = "0.1.8" 1192 | source = "registry+https://github.com/rust-lang/crates.io-index" 1193 | checksum = "aae21c3177a27788957044151cc2800043d127acaa460a47ebb9b84dfa2c6aa0" 1194 | 1195 | [[package]] 1196 | name = "indexmap" 1197 | version = "2.7.0" 1198 | source = "registry+https://github.com/rust-lang/crates.io-index" 1199 | checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" 1200 | dependencies = [ 1201 | "equivalent", 1202 | "hashbrown", 1203 | ] 1204 | 1205 | [[package]] 1206 | name = "is-terminal" 1207 | version = "0.4.13" 1208 | source = "registry+https://github.com/rust-lang/crates.io-index" 1209 | checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" 1210 | dependencies = [ 1211 | "hermit-abi", 1212 | "libc", 1213 | "windows-sys 0.52.0", 1214 | ] 1215 | 1216 | [[package]] 1217 | name = "is_terminal_polyfill" 1218 | version = "1.70.1" 1219 | source = "registry+https://github.com/rust-lang/crates.io-index" 1220 | checksum = "7943c866cc5cd64cbc25b2e01621d07fa8eb2a1a23160ee81ce38704e97b8ecf" 1221 | 1222 | [[package]] 1223 | name = "itoa" 1224 | version = "1.0.14" 1225 | source = "registry+https://github.com/rust-lang/crates.io-index" 1226 | checksum = "d75a2a4b1b190afb6f5425f10f6a8f959d2ea0b9c2b1d79553551850539e4674" 1227 | 1228 | [[package]] 1229 | name = "jobserver" 1230 | version = "0.1.32" 1231 | source = "registry+https://github.com/rust-lang/crates.io-index" 1232 | checksum = "48d1dbcbbeb6a7fec7e059840aa538bd62aaccf972c7346c4d9d2059312853d0" 1233 | dependencies = [ 1234 | "libc", 1235 | ] 1236 | 1237 | [[package]] 1238 | name = "js-sys" 1239 | version = "0.3.76" 1240 | source = "registry+https://github.com/rust-lang/crates.io-index" 1241 | checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" 1242 | dependencies = [ 1243 | "once_cell", 1244 | "wasm-bindgen", 1245 | ] 1246 | 1247 | [[package]] 1248 | name = "language-tags" 1249 | version = "0.3.2" 1250 | source = "registry+https://github.com/rust-lang/crates.io-index" 1251 | checksum = "d4345964bb142484797b161f473a503a434de77149dd8c7427788c6e13379388" 1252 | 1253 | [[package]] 1254 | name = "lazy_static" 1255 | version = "1.5.0" 1256 | source = "registry+https://github.com/rust-lang/crates.io-index" 1257 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" 1258 | 1259 | [[package]] 1260 | name = "libc" 1261 | version = "0.2.168" 1262 | source = "registry+https://github.com/rust-lang/crates.io-index" 1263 | checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" 1264 | 1265 | [[package]] 1266 | name = "libm" 1267 | version = "0.2.11" 1268 | source = "registry+https://github.com/rust-lang/crates.io-index" 1269 | checksum = "8355be11b20d696c8f18f6cc018c4e372165b1fa8126cef092399c9951984ffa" 1270 | 1271 | [[package]] 1272 | name = "linked-hash-map" 1273 | version = "0.5.6" 1274 | source = "registry+https://github.com/rust-lang/crates.io-index" 1275 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f" 1276 | 1277 | [[package]] 1278 | name = "linux-raw-sys" 1279 | version = "0.4.14" 1280 | source = "registry+https://github.com/rust-lang/crates.io-index" 1281 | checksum = "78b3ae25bc7c8c38cec158d1f2757ee79e9b3740fbc7ccf0e59e4b08d793fa89" 1282 | 1283 | [[package]] 1284 | name = "litemap" 1285 | version = "0.7.4" 1286 | source = "registry+https://github.com/rust-lang/crates.io-index" 1287 | checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" 1288 | 1289 | [[package]] 1290 | name = "local-channel" 1291 | version = "0.1.5" 1292 | source = "registry+https://github.com/rust-lang/crates.io-index" 1293 | checksum = "b6cbc85e69b8df4b8bb8b89ec634e7189099cea8927a276b7384ce5488e53ec8" 1294 | dependencies = [ 1295 | "futures-core", 1296 | "futures-sink", 1297 | "local-waker", 1298 | ] 1299 | 1300 | [[package]] 1301 | name = "local-waker" 1302 | version = "0.1.4" 1303 | source = "registry+https://github.com/rust-lang/crates.io-index" 1304 | checksum = "4d873d7c67ce09b42110d801813efbc9364414e356be9935700d368351657487" 1305 | 1306 | [[package]] 1307 | name = "lock_api" 1308 | version = "0.4.12" 1309 | source = "registry+https://github.com/rust-lang/crates.io-index" 1310 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" 1311 | dependencies = [ 1312 | "autocfg", 1313 | "scopeguard", 1314 | ] 1315 | 1316 | [[package]] 1317 | name = "log" 1318 | version = "0.4.22" 1319 | source = "registry+https://github.com/rust-lang/crates.io-index" 1320 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24" 1321 | 1322 | [[package]] 1323 | name = "mac" 1324 | version = "0.1.1" 1325 | source = "registry+https://github.com/rust-lang/crates.io-index" 1326 | checksum = "c41e0c4fef86961ac6d6f8a82609f55f31b05e4fce149ac5710e439df7619ba4" 1327 | 1328 | [[package]] 1329 | name = "markup5ever" 1330 | version = "0.14.0" 1331 | source = "registry+https://github.com/rust-lang/crates.io-index" 1332 | checksum = "82c88c6129bd24319e62a0359cb6b958fa7e8be6e19bb1663bc396b90883aca5" 1333 | dependencies = [ 1334 | "log", 1335 | "phf", 1336 | "phf_codegen", 1337 | "string_cache", 1338 | "string_cache_codegen", 1339 | "tendril", 1340 | ] 1341 | 1342 | [[package]] 1343 | name = "memchr" 1344 | version = "2.7.4" 1345 | source = "registry+https://github.com/rust-lang/crates.io-index" 1346 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3" 1347 | 1348 | [[package]] 1349 | name = "mime" 1350 | version = "0.3.17" 1351 | source = "registry+https://github.com/rust-lang/crates.io-index" 1352 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" 1353 | 1354 | [[package]] 1355 | name = "mime_guess" 1356 | version = "2.0.5" 1357 | source = "registry+https://github.com/rust-lang/crates.io-index" 1358 | checksum = "f7c44f8e672c00fe5308fa235f821cb4198414e1c77935c1ab6948d3fd78550e" 1359 | dependencies = [ 1360 | "mime", 1361 | "unicase", 1362 | ] 1363 | 1364 | [[package]] 1365 | name = "minimal-lexical" 1366 | version = "0.2.1" 1367 | source = "registry+https://github.com/rust-lang/crates.io-index" 1368 | checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" 1369 | 1370 | [[package]] 1371 | name = "miniz_oxide" 1372 | version = "0.8.0" 1373 | source = "registry+https://github.com/rust-lang/crates.io-index" 1374 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1" 1375 | dependencies = [ 1376 | "adler2", 1377 | ] 1378 | 1379 | [[package]] 1380 | name = "mio" 1381 | version = "1.0.3" 1382 | source = "registry+https://github.com/rust-lang/crates.io-index" 1383 | checksum = "2886843bf800fba2e3377cff24abf6379b4c4d5c6681eaf9ea5b0d15090450bd" 1384 | dependencies = [ 1385 | "libc", 1386 | "log", 1387 | "wasi", 1388 | "windows-sys 0.52.0", 1389 | ] 1390 | 1391 | [[package]] 1392 | name = "new_debug_unreachable" 1393 | version = "1.0.6" 1394 | source = "registry+https://github.com/rust-lang/crates.io-index" 1395 | checksum = "650eef8c711430f1a879fdd01d4745a7deea475becfb90269c06775983bbf086" 1396 | 1397 | [[package]] 1398 | name = "nom" 1399 | version = "7.1.3" 1400 | source = "registry+https://github.com/rust-lang/crates.io-index" 1401 | checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" 1402 | dependencies = [ 1403 | "memchr", 1404 | "minimal-lexical", 1405 | ] 1406 | 1407 | [[package]] 1408 | name = "num-conv" 1409 | version = "0.1.0" 1410 | source = "registry+https://github.com/rust-lang/crates.io-index" 1411 | checksum = "51d515d32fb182ee37cda2ccdcb92950d6a3c2893aa280e540671c2cd0f3b1d9" 1412 | 1413 | [[package]] 1414 | name = "num-traits" 1415 | version = "0.2.19" 1416 | source = "registry+https://github.com/rust-lang/crates.io-index" 1417 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841" 1418 | dependencies = [ 1419 | "autocfg", 1420 | ] 1421 | 1422 | [[package]] 1423 | name = "object" 1424 | version = "0.36.5" 1425 | source = "registry+https://github.com/rust-lang/crates.io-index" 1426 | checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e" 1427 | dependencies = [ 1428 | "memchr", 1429 | ] 1430 | 1431 | [[package]] 1432 | name = "once_cell" 1433 | version = "1.20.2" 1434 | source = "registry+https://github.com/rust-lang/crates.io-index" 1435 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775" 1436 | 1437 | [[package]] 1438 | name = "onig" 1439 | version = "6.4.0" 1440 | source = "registry+https://github.com/rust-lang/crates.io-index" 1441 | checksum = "8c4b31c8722ad9171c6d77d3557db078cab2bd50afcc9d09c8b315c59df8ca4f" 1442 | dependencies = [ 1443 | "bitflags 1.3.2", 1444 | "libc", 1445 | "once_cell", 1446 | "onig_sys", 1447 | ] 1448 | 1449 | [[package]] 1450 | name = "onig_sys" 1451 | version = "69.8.1" 1452 | source = "registry+https://github.com/rust-lang/crates.io-index" 1453 | checksum = "7b829e3d7e9cc74c7e315ee8edb185bf4190da5acde74afd7fc59c35b1f086e7" 1454 | dependencies = [ 1455 | "cc", 1456 | "pkg-config", 1457 | ] 1458 | 1459 | [[package]] 1460 | name = "parking_lot" 1461 | version = "0.12.3" 1462 | source = "registry+https://github.com/rust-lang/crates.io-index" 1463 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27" 1464 | dependencies = [ 1465 | "lock_api", 1466 | "parking_lot_core", 1467 | ] 1468 | 1469 | [[package]] 1470 | name = "parking_lot_core" 1471 | version = "0.9.10" 1472 | source = "registry+https://github.com/rust-lang/crates.io-index" 1473 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" 1474 | dependencies = [ 1475 | "cfg-if", 1476 | "libc", 1477 | "redox_syscall", 1478 | "smallvec", 1479 | "windows-targets", 1480 | ] 1481 | 1482 | [[package]] 1483 | name = "parse-zoneinfo" 1484 | version = "0.3.1" 1485 | source = "registry+https://github.com/rust-lang/crates.io-index" 1486 | checksum = "1f2a05b18d44e2957b88f96ba460715e295bc1d7510468a2f3d3b44535d26c24" 1487 | dependencies = [ 1488 | "regex", 1489 | ] 1490 | 1491 | [[package]] 1492 | name = "paste" 1493 | version = "1.0.15" 1494 | source = "registry+https://github.com/rust-lang/crates.io-index" 1495 | checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" 1496 | 1497 | [[package]] 1498 | name = "percent-encoding" 1499 | version = "2.3.1" 1500 | source = "registry+https://github.com/rust-lang/crates.io-index" 1501 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e" 1502 | 1503 | [[package]] 1504 | name = "personal-site" 1505 | version = "0.1.0" 1506 | dependencies = [ 1507 | "actix-files", 1508 | "actix-web", 1509 | "chrono", 1510 | "comrak", 1511 | "env_logger", 1512 | "html2text", 1513 | "html_parser", 1514 | "log", 1515 | "pulldown-cmark", 1516 | "serde", 1517 | "serde_yaml", 1518 | "tera", 1519 | "walkdir", 1520 | ] 1521 | 1522 | [[package]] 1523 | name = "pest" 1524 | version = "2.7.15" 1525 | source = "registry+https://github.com/rust-lang/crates.io-index" 1526 | checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" 1527 | dependencies = [ 1528 | "memchr", 1529 | "thiserror 2.0.7", 1530 | "ucd-trie", 1531 | ] 1532 | 1533 | [[package]] 1534 | name = "pest_derive" 1535 | version = "2.7.15" 1536 | source = "registry+https://github.com/rust-lang/crates.io-index" 1537 | checksum = "816518421cfc6887a0d62bf441b6ffb4536fcc926395a69e1a85852d4363f57e" 1538 | dependencies = [ 1539 | "pest", 1540 | "pest_generator", 1541 | ] 1542 | 1543 | [[package]] 1544 | name = "pest_generator" 1545 | version = "2.7.15" 1546 | source = "registry+https://github.com/rust-lang/crates.io-index" 1547 | checksum = "7d1396fd3a870fc7838768d171b4616d5c91f6cc25e377b673d714567d99377b" 1548 | dependencies = [ 1549 | "pest", 1550 | "pest_meta", 1551 | "proc-macro2", 1552 | "quote", 1553 | "syn", 1554 | ] 1555 | 1556 | [[package]] 1557 | name = "pest_meta" 1558 | version = "2.7.15" 1559 | source = "registry+https://github.com/rust-lang/crates.io-index" 1560 | checksum = "e1e58089ea25d717bfd31fb534e4f3afcc2cc569c70de3e239778991ea3b7dea" 1561 | dependencies = [ 1562 | "once_cell", 1563 | "pest", 1564 | "sha2", 1565 | ] 1566 | 1567 | [[package]] 1568 | name = "phf" 1569 | version = "0.11.2" 1570 | source = "registry+https://github.com/rust-lang/crates.io-index" 1571 | checksum = "ade2d8b8f33c7333b51bcf0428d37e217e9f32192ae4772156f65063b8ce03dc" 1572 | dependencies = [ 1573 | "phf_shared 0.11.2", 1574 | ] 1575 | 1576 | [[package]] 1577 | name = "phf_codegen" 1578 | version = "0.11.2" 1579 | source = "registry+https://github.com/rust-lang/crates.io-index" 1580 | checksum = "e8d39688d359e6b34654d328e262234662d16cc0f60ec8dcbe5e718709342a5a" 1581 | dependencies = [ 1582 | "phf_generator 0.11.2", 1583 | "phf_shared 0.11.2", 1584 | ] 1585 | 1586 | [[package]] 1587 | name = "phf_generator" 1588 | version = "0.10.0" 1589 | source = "registry+https://github.com/rust-lang/crates.io-index" 1590 | checksum = "5d5285893bb5eb82e6aaf5d59ee909a06a16737a8970984dd7746ba9283498d6" 1591 | dependencies = [ 1592 | "phf_shared 0.10.0", 1593 | "rand", 1594 | ] 1595 | 1596 | [[package]] 1597 | name = "phf_generator" 1598 | version = "0.11.2" 1599 | source = "registry+https://github.com/rust-lang/crates.io-index" 1600 | checksum = "48e4cc64c2ad9ebe670cb8fd69dd50ae301650392e81c05f9bfcb2d5bdbc24b0" 1601 | dependencies = [ 1602 | "phf_shared 0.11.2", 1603 | "rand", 1604 | ] 1605 | 1606 | [[package]] 1607 | name = "phf_shared" 1608 | version = "0.10.0" 1609 | source = "registry+https://github.com/rust-lang/crates.io-index" 1610 | checksum = "b6796ad771acdc0123d2a88dc428b5e38ef24456743ddb1744ed628f9815c096" 1611 | dependencies = [ 1612 | "siphasher", 1613 | ] 1614 | 1615 | [[package]] 1616 | name = "phf_shared" 1617 | version = "0.11.2" 1618 | source = "registry+https://github.com/rust-lang/crates.io-index" 1619 | checksum = "90fcb95eef784c2ac79119d1dd819e162b5da872ce6f3c3abe1e8ca1c082f72b" 1620 | dependencies = [ 1621 | "siphasher", 1622 | ] 1623 | 1624 | [[package]] 1625 | name = "pin-project-lite" 1626 | version = "0.2.15" 1627 | source = "registry+https://github.com/rust-lang/crates.io-index" 1628 | checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff" 1629 | 1630 | [[package]] 1631 | name = "pin-utils" 1632 | version = "0.1.0" 1633 | source = "registry+https://github.com/rust-lang/crates.io-index" 1634 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184" 1635 | 1636 | [[package]] 1637 | name = "pkg-config" 1638 | version = "0.3.31" 1639 | source = "registry+https://github.com/rust-lang/crates.io-index" 1640 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" 1641 | 1642 | [[package]] 1643 | name = "plist" 1644 | version = "1.7.0" 1645 | source = "registry+https://github.com/rust-lang/crates.io-index" 1646 | checksum = "42cf17e9a1800f5f396bc67d193dc9411b59012a5876445ef450d449881e1016" 1647 | dependencies = [ 1648 | "base64", 1649 | "indexmap", 1650 | "quick-xml", 1651 | "serde", 1652 | "time", 1653 | ] 1654 | 1655 | [[package]] 1656 | name = "powerfmt" 1657 | version = "0.2.0" 1658 | source = "registry+https://github.com/rust-lang/crates.io-index" 1659 | checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" 1660 | 1661 | [[package]] 1662 | name = "ppv-lite86" 1663 | version = "0.2.20" 1664 | source = "registry+https://github.com/rust-lang/crates.io-index" 1665 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" 1666 | dependencies = [ 1667 | "zerocopy", 1668 | ] 1669 | 1670 | [[package]] 1671 | name = "precomputed-hash" 1672 | version = "0.1.1" 1673 | source = "registry+https://github.com/rust-lang/crates.io-index" 1674 | checksum = "925383efa346730478fb4838dbe9137d2a47675ad789c546d150a6e1dd4ab31c" 1675 | 1676 | [[package]] 1677 | name = "proc-macro2" 1678 | version = "1.0.92" 1679 | source = "registry+https://github.com/rust-lang/crates.io-index" 1680 | checksum = "37d3544b3f2748c54e147655edb5025752e2303145b5aefb3c3ea2c78b973bb0" 1681 | dependencies = [ 1682 | "unicode-ident", 1683 | ] 1684 | 1685 | [[package]] 1686 | name = "pulldown-cmark" 1687 | version = "0.9.6" 1688 | source = "registry+https://github.com/rust-lang/crates.io-index" 1689 | checksum = "57206b407293d2bcd3af849ce869d52068623f19e1b5ff8e8778e3309439682b" 1690 | dependencies = [ 1691 | "bitflags 2.6.0", 1692 | "getopts", 1693 | "memchr", 1694 | "unicase", 1695 | ] 1696 | 1697 | [[package]] 1698 | name = "quick-xml" 1699 | version = "0.32.0" 1700 | source = "registry+https://github.com/rust-lang/crates.io-index" 1701 | checksum = "1d3a6e5838b60e0e8fa7a43f22ade549a37d61f8bdbe636d0d7816191de969c2" 1702 | dependencies = [ 1703 | "memchr", 1704 | ] 1705 | 1706 | [[package]] 1707 | name = "quote" 1708 | version = "1.0.37" 1709 | source = "registry+https://github.com/rust-lang/crates.io-index" 1710 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af" 1711 | dependencies = [ 1712 | "proc-macro2", 1713 | ] 1714 | 1715 | [[package]] 1716 | name = "rand" 1717 | version = "0.8.5" 1718 | source = "registry+https://github.com/rust-lang/crates.io-index" 1719 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404" 1720 | dependencies = [ 1721 | "libc", 1722 | "rand_chacha", 1723 | "rand_core", 1724 | ] 1725 | 1726 | [[package]] 1727 | name = "rand_chacha" 1728 | version = "0.3.1" 1729 | source = "registry+https://github.com/rust-lang/crates.io-index" 1730 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88" 1731 | dependencies = [ 1732 | "ppv-lite86", 1733 | "rand_core", 1734 | ] 1735 | 1736 | [[package]] 1737 | name = "rand_core" 1738 | version = "0.6.4" 1739 | source = "registry+https://github.com/rust-lang/crates.io-index" 1740 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c" 1741 | dependencies = [ 1742 | "getrandom", 1743 | ] 1744 | 1745 | [[package]] 1746 | name = "redox_syscall" 1747 | version = "0.5.8" 1748 | source = "registry+https://github.com/rust-lang/crates.io-index" 1749 | checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" 1750 | dependencies = [ 1751 | "bitflags 2.6.0", 1752 | ] 1753 | 1754 | [[package]] 1755 | name = "regex" 1756 | version = "1.11.1" 1757 | source = "registry+https://github.com/rust-lang/crates.io-index" 1758 | checksum = "b544ef1b4eac5dc2db33ea63606ae9ffcfac26c1416a2806ae0bf5f56b201191" 1759 | dependencies = [ 1760 | "aho-corasick", 1761 | "memchr", 1762 | "regex-automata", 1763 | "regex-syntax", 1764 | ] 1765 | 1766 | [[package]] 1767 | name = "regex-automata" 1768 | version = "0.4.9" 1769 | source = "registry+https://github.com/rust-lang/crates.io-index" 1770 | checksum = "809e8dc61f6de73b46c85f4c96486310fe304c434cfa43669d7b40f711150908" 1771 | dependencies = [ 1772 | "aho-corasick", 1773 | "memchr", 1774 | "regex-syntax", 1775 | ] 1776 | 1777 | [[package]] 1778 | name = "regex-lite" 1779 | version = "0.1.6" 1780 | source = "registry+https://github.com/rust-lang/crates.io-index" 1781 | checksum = "53a49587ad06b26609c52e423de037e7f57f20d53535d66e08c695f347df952a" 1782 | 1783 | [[package]] 1784 | name = "regex-syntax" 1785 | version = "0.8.5" 1786 | source = "registry+https://github.com/rust-lang/crates.io-index" 1787 | checksum = "2b15c43186be67a4fd63bee50d0303afffcef381492ebe2c5d87f324e1b8815c" 1788 | 1789 | [[package]] 1790 | name = "rustc-demangle" 1791 | version = "0.1.24" 1792 | source = "registry+https://github.com/rust-lang/crates.io-index" 1793 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" 1794 | 1795 | [[package]] 1796 | name = "rustc_version" 1797 | version = "0.4.1" 1798 | source = "registry+https://github.com/rust-lang/crates.io-index" 1799 | checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" 1800 | dependencies = [ 1801 | "semver", 1802 | ] 1803 | 1804 | [[package]] 1805 | name = "rustix" 1806 | version = "0.38.42" 1807 | source = "registry+https://github.com/rust-lang/crates.io-index" 1808 | checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" 1809 | dependencies = [ 1810 | "bitflags 2.6.0", 1811 | "errno", 1812 | "libc", 1813 | "linux-raw-sys", 1814 | "windows-sys 0.59.0", 1815 | ] 1816 | 1817 | [[package]] 1818 | name = "ryu" 1819 | version = "1.0.18" 1820 | source = "registry+https://github.com/rust-lang/crates.io-index" 1821 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f" 1822 | 1823 | [[package]] 1824 | name = "same-file" 1825 | version = "1.0.6" 1826 | source = "registry+https://github.com/rust-lang/crates.io-index" 1827 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" 1828 | dependencies = [ 1829 | "winapi-util", 1830 | ] 1831 | 1832 | [[package]] 1833 | name = "scopeguard" 1834 | version = "1.2.0" 1835 | source = "registry+https://github.com/rust-lang/crates.io-index" 1836 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" 1837 | 1838 | [[package]] 1839 | name = "semver" 1840 | version = "1.0.24" 1841 | source = "registry+https://github.com/rust-lang/crates.io-index" 1842 | checksum = "3cb6eb87a131f756572d7fb904f6e7b68633f09cca868c5df1c4b8d1a694bbba" 1843 | 1844 | [[package]] 1845 | name = "serde" 1846 | version = "1.0.216" 1847 | source = "registry+https://github.com/rust-lang/crates.io-index" 1848 | checksum = "0b9781016e935a97e8beecf0c933758c97a5520d32930e460142b4cd80c6338e" 1849 | dependencies = [ 1850 | "serde_derive", 1851 | ] 1852 | 1853 | [[package]] 1854 | name = "serde_derive" 1855 | version = "1.0.216" 1856 | source = "registry+https://github.com/rust-lang/crates.io-index" 1857 | checksum = "46f859dbbf73865c6627ed570e78961cd3ac92407a2d117204c49232485da55e" 1858 | dependencies = [ 1859 | "proc-macro2", 1860 | "quote", 1861 | "syn", 1862 | ] 1863 | 1864 | [[package]] 1865 | name = "serde_json" 1866 | version = "1.0.133" 1867 | source = "registry+https://github.com/rust-lang/crates.io-index" 1868 | checksum = "c7fceb2473b9166b2294ef05efcb65a3db80803f0b03ef86a5fc88a2b85ee377" 1869 | dependencies = [ 1870 | "itoa", 1871 | "memchr", 1872 | "ryu", 1873 | "serde", 1874 | ] 1875 | 1876 | [[package]] 1877 | name = "serde_urlencoded" 1878 | version = "0.7.1" 1879 | source = "registry+https://github.com/rust-lang/crates.io-index" 1880 | checksum = "d3491c14715ca2294c4d6a88f15e84739788c1d030eed8c110436aafdaa2f3fd" 1881 | dependencies = [ 1882 | "form_urlencoded", 1883 | "itoa", 1884 | "ryu", 1885 | "serde", 1886 | ] 1887 | 1888 | [[package]] 1889 | name = "serde_yaml" 1890 | version = "0.9.34+deprecated" 1891 | source = "registry+https://github.com/rust-lang/crates.io-index" 1892 | checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47" 1893 | dependencies = [ 1894 | "indexmap", 1895 | "itoa", 1896 | "ryu", 1897 | "serde", 1898 | "unsafe-libyaml", 1899 | ] 1900 | 1901 | [[package]] 1902 | name = "sha1" 1903 | version = "0.10.6" 1904 | source = "registry+https://github.com/rust-lang/crates.io-index" 1905 | checksum = "e3bf829a2d51ab4a5ddf1352d8470c140cadc8301b2ae1789db023f01cedd6ba" 1906 | dependencies = [ 1907 | "cfg-if", 1908 | "cpufeatures", 1909 | "digest", 1910 | ] 1911 | 1912 | [[package]] 1913 | name = "sha2" 1914 | version = "0.10.8" 1915 | source = "registry+https://github.com/rust-lang/crates.io-index" 1916 | checksum = "793db75ad2bcafc3ffa7c68b215fee268f537982cd901d132f89c6343f3a3dc8" 1917 | dependencies = [ 1918 | "cfg-if", 1919 | "cpufeatures", 1920 | "digest", 1921 | ] 1922 | 1923 | [[package]] 1924 | name = "shell-words" 1925 | version = "1.1.0" 1926 | source = "registry+https://github.com/rust-lang/crates.io-index" 1927 | checksum = "24188a676b6ae68c3b2cb3a01be17fbf7240ce009799bb56d5b1409051e78fde" 1928 | 1929 | [[package]] 1930 | name = "shlex" 1931 | version = "1.3.0" 1932 | source = "registry+https://github.com/rust-lang/crates.io-index" 1933 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64" 1934 | 1935 | [[package]] 1936 | name = "signal-hook-registry" 1937 | version = "1.4.2" 1938 | source = "registry+https://github.com/rust-lang/crates.io-index" 1939 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1" 1940 | dependencies = [ 1941 | "libc", 1942 | ] 1943 | 1944 | [[package]] 1945 | name = "siphasher" 1946 | version = "0.3.11" 1947 | source = "registry+https://github.com/rust-lang/crates.io-index" 1948 | checksum = "38b58827f4464d87d377d175e90bf58eb00fd8716ff0a62f80356b5e61555d0d" 1949 | 1950 | [[package]] 1951 | name = "slab" 1952 | version = "0.4.9" 1953 | source = "registry+https://github.com/rust-lang/crates.io-index" 1954 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67" 1955 | dependencies = [ 1956 | "autocfg", 1957 | ] 1958 | 1959 | [[package]] 1960 | name = "slug" 1961 | version = "0.1.6" 1962 | source = "registry+https://github.com/rust-lang/crates.io-index" 1963 | checksum = "882a80f72ee45de3cc9a5afeb2da0331d58df69e4e7d8eeb5d3c7784ae67e724" 1964 | dependencies = [ 1965 | "deunicode", 1966 | "wasm-bindgen", 1967 | ] 1968 | 1969 | [[package]] 1970 | name = "smallvec" 1971 | version = "1.13.2" 1972 | source = "registry+https://github.com/rust-lang/crates.io-index" 1973 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67" 1974 | 1975 | [[package]] 1976 | name = "socket2" 1977 | version = "0.5.8" 1978 | source = "registry+https://github.com/rust-lang/crates.io-index" 1979 | checksum = "c970269d99b64e60ec3bd6ad27270092a5394c4e309314b18ae3fe575695fbe8" 1980 | dependencies = [ 1981 | "libc", 1982 | "windows-sys 0.52.0", 1983 | ] 1984 | 1985 | [[package]] 1986 | name = "stable_deref_trait" 1987 | version = "1.2.0" 1988 | source = "registry+https://github.com/rust-lang/crates.io-index" 1989 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" 1990 | 1991 | [[package]] 1992 | name = "string_cache" 1993 | version = "0.8.7" 1994 | source = "registry+https://github.com/rust-lang/crates.io-index" 1995 | checksum = "f91138e76242f575eb1d3b38b4f1362f10d3a43f47d182a5b359af488a02293b" 1996 | dependencies = [ 1997 | "new_debug_unreachable", 1998 | "once_cell", 1999 | "parking_lot", 2000 | "phf_shared 0.10.0", 2001 | "precomputed-hash", 2002 | "serde", 2003 | ] 2004 | 2005 | [[package]] 2006 | name = "string_cache_codegen" 2007 | version = "0.5.2" 2008 | source = "registry+https://github.com/rust-lang/crates.io-index" 2009 | checksum = "6bb30289b722be4ff74a408c3cc27edeaad656e06cb1fe8fa9231fa59c728988" 2010 | dependencies = [ 2011 | "phf_generator 0.10.0", 2012 | "phf_shared 0.10.0", 2013 | "proc-macro2", 2014 | "quote", 2015 | ] 2016 | 2017 | [[package]] 2018 | name = "strsim" 2019 | version = "0.11.1" 2020 | source = "registry+https://github.com/rust-lang/crates.io-index" 2021 | checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" 2022 | 2023 | [[package]] 2024 | name = "syn" 2025 | version = "2.0.90" 2026 | source = "registry+https://github.com/rust-lang/crates.io-index" 2027 | checksum = "919d3b74a5dd0ccd15aeb8f93e7006bd9e14c295087c9896a110f490752bcf31" 2028 | dependencies = [ 2029 | "proc-macro2", 2030 | "quote", 2031 | "unicode-ident", 2032 | ] 2033 | 2034 | [[package]] 2035 | name = "synstructure" 2036 | version = "0.13.1" 2037 | source = "registry+https://github.com/rust-lang/crates.io-index" 2038 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971" 2039 | dependencies = [ 2040 | "proc-macro2", 2041 | "quote", 2042 | "syn", 2043 | ] 2044 | 2045 | [[package]] 2046 | name = "syntect" 2047 | version = "5.2.0" 2048 | source = "registry+https://github.com/rust-lang/crates.io-index" 2049 | checksum = "874dcfa363995604333cf947ae9f751ca3af4522c60886774c4963943b4746b1" 2050 | dependencies = [ 2051 | "bincode", 2052 | "bitflags 1.3.2", 2053 | "fancy-regex", 2054 | "flate2", 2055 | "fnv", 2056 | "once_cell", 2057 | "onig", 2058 | "plist", 2059 | "regex-syntax", 2060 | "serde", 2061 | "serde_derive", 2062 | "serde_json", 2063 | "thiserror 1.0.69", 2064 | "walkdir", 2065 | "yaml-rust", 2066 | ] 2067 | 2068 | [[package]] 2069 | name = "tendril" 2070 | version = "0.4.3" 2071 | source = "registry+https://github.com/rust-lang/crates.io-index" 2072 | checksum = "d24a120c5fc464a3458240ee02c299ebcb9d67b5249c8848b09d639dca8d7bb0" 2073 | dependencies = [ 2074 | "futf", 2075 | "mac", 2076 | "utf-8", 2077 | ] 2078 | 2079 | [[package]] 2080 | name = "tera" 2081 | version = "1.20.0" 2082 | source = "registry+https://github.com/rust-lang/crates.io-index" 2083 | checksum = "ab9d851b45e865f178319da0abdbfe6acbc4328759ff18dafc3a41c16b4cd2ee" 2084 | dependencies = [ 2085 | "chrono", 2086 | "chrono-tz", 2087 | "globwalk", 2088 | "humansize", 2089 | "lazy_static", 2090 | "percent-encoding", 2091 | "pest", 2092 | "pest_derive", 2093 | "rand", 2094 | "regex", 2095 | "serde", 2096 | "serde_json", 2097 | "slug", 2098 | "unic-segment", 2099 | ] 2100 | 2101 | [[package]] 2102 | name = "termcolor" 2103 | version = "1.4.1" 2104 | source = "registry+https://github.com/rust-lang/crates.io-index" 2105 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755" 2106 | dependencies = [ 2107 | "winapi-util", 2108 | ] 2109 | 2110 | [[package]] 2111 | name = "terminal_size" 2112 | version = "0.4.1" 2113 | source = "registry+https://github.com/rust-lang/crates.io-index" 2114 | checksum = "5352447f921fda68cf61b4101566c0bdb5104eff6804d0678e5227580ab6a4e9" 2115 | dependencies = [ 2116 | "rustix", 2117 | "windows-sys 0.59.0", 2118 | ] 2119 | 2120 | [[package]] 2121 | name = "thiserror" 2122 | version = "1.0.69" 2123 | source = "registry+https://github.com/rust-lang/crates.io-index" 2124 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52" 2125 | dependencies = [ 2126 | "thiserror-impl 1.0.69", 2127 | ] 2128 | 2129 | [[package]] 2130 | name = "thiserror" 2131 | version = "2.0.7" 2132 | source = "registry+https://github.com/rust-lang/crates.io-index" 2133 | checksum = "93605438cbd668185516ab499d589afb7ee1859ea3d5fc8f6b0755e1c7443767" 2134 | dependencies = [ 2135 | "thiserror-impl 2.0.7", 2136 | ] 2137 | 2138 | [[package]] 2139 | name = "thiserror-impl" 2140 | version = "1.0.69" 2141 | source = "registry+https://github.com/rust-lang/crates.io-index" 2142 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1" 2143 | dependencies = [ 2144 | "proc-macro2", 2145 | "quote", 2146 | "syn", 2147 | ] 2148 | 2149 | [[package]] 2150 | name = "thiserror-impl" 2151 | version = "2.0.7" 2152 | source = "registry+https://github.com/rust-lang/crates.io-index" 2153 | checksum = "e1d8749b4531af2117677a5fcd12b1348a3fe2b81e36e61ffeac5c4aa3273e36" 2154 | dependencies = [ 2155 | "proc-macro2", 2156 | "quote", 2157 | "syn", 2158 | ] 2159 | 2160 | [[package]] 2161 | name = "time" 2162 | version = "0.3.37" 2163 | source = "registry+https://github.com/rust-lang/crates.io-index" 2164 | checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" 2165 | dependencies = [ 2166 | "deranged", 2167 | "itoa", 2168 | "num-conv", 2169 | "powerfmt", 2170 | "serde", 2171 | "time-core", 2172 | "time-macros", 2173 | ] 2174 | 2175 | [[package]] 2176 | name = "time-core" 2177 | version = "0.1.2" 2178 | source = "registry+https://github.com/rust-lang/crates.io-index" 2179 | checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" 2180 | 2181 | [[package]] 2182 | name = "time-macros" 2183 | version = "0.2.19" 2184 | source = "registry+https://github.com/rust-lang/crates.io-index" 2185 | checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" 2186 | dependencies = [ 2187 | "num-conv", 2188 | "time-core", 2189 | ] 2190 | 2191 | [[package]] 2192 | name = "tinystr" 2193 | version = "0.7.6" 2194 | source = "registry+https://github.com/rust-lang/crates.io-index" 2195 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f" 2196 | dependencies = [ 2197 | "displaydoc", 2198 | "zerovec", 2199 | ] 2200 | 2201 | [[package]] 2202 | name = "tokio" 2203 | version = "1.42.0" 2204 | source = "registry+https://github.com/rust-lang/crates.io-index" 2205 | checksum = "5cec9b21b0450273377fc97bd4c33a8acffc8c996c987a7c5b319a0083707551" 2206 | dependencies = [ 2207 | "backtrace", 2208 | "bytes", 2209 | "libc", 2210 | "mio", 2211 | "parking_lot", 2212 | "pin-project-lite", 2213 | "signal-hook-registry", 2214 | "socket2", 2215 | "windows-sys 0.52.0", 2216 | ] 2217 | 2218 | [[package]] 2219 | name = "tokio-util" 2220 | version = "0.7.13" 2221 | source = "registry+https://github.com/rust-lang/crates.io-index" 2222 | checksum = "d7fcaa8d55a2bdd6b83ace262b016eca0d79ee02818c5c1bcdf0305114081078" 2223 | dependencies = [ 2224 | "bytes", 2225 | "futures-core", 2226 | "futures-sink", 2227 | "pin-project-lite", 2228 | "tokio", 2229 | ] 2230 | 2231 | [[package]] 2232 | name = "tracing" 2233 | version = "0.1.41" 2234 | source = "registry+https://github.com/rust-lang/crates.io-index" 2235 | checksum = "784e0ac535deb450455cbfa28a6f0df145ea1bb7ae51b821cf5e7927fdcfbdd0" 2236 | dependencies = [ 2237 | "log", 2238 | "pin-project-lite", 2239 | "tracing-core", 2240 | ] 2241 | 2242 | [[package]] 2243 | name = "tracing-core" 2244 | version = "0.1.33" 2245 | source = "registry+https://github.com/rust-lang/crates.io-index" 2246 | checksum = "e672c95779cf947c5311f83787af4fa8fffd12fb27e4993211a84bdfd9610f9c" 2247 | dependencies = [ 2248 | "once_cell", 2249 | ] 2250 | 2251 | [[package]] 2252 | name = "typed-arena" 2253 | version = "2.0.2" 2254 | source = "registry+https://github.com/rust-lang/crates.io-index" 2255 | checksum = "6af6ae20167a9ece4bcb41af5b80f8a1f1df981f6391189ce00fd257af04126a" 2256 | 2257 | [[package]] 2258 | name = "typenum" 2259 | version = "1.17.0" 2260 | source = "registry+https://github.com/rust-lang/crates.io-index" 2261 | checksum = "42ff0bf0c66b8238c6f3b578df37d0b7848e55df8577b3f74f92a69acceeb825" 2262 | 2263 | [[package]] 2264 | name = "ucd-trie" 2265 | version = "0.1.7" 2266 | source = "registry+https://github.com/rust-lang/crates.io-index" 2267 | checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" 2268 | 2269 | [[package]] 2270 | name = "unic-char-property" 2271 | version = "0.9.0" 2272 | source = "registry+https://github.com/rust-lang/crates.io-index" 2273 | checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" 2274 | dependencies = [ 2275 | "unic-char-range", 2276 | ] 2277 | 2278 | [[package]] 2279 | name = "unic-char-range" 2280 | version = "0.9.0" 2281 | source = "registry+https://github.com/rust-lang/crates.io-index" 2282 | checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" 2283 | 2284 | [[package]] 2285 | name = "unic-common" 2286 | version = "0.9.0" 2287 | source = "registry+https://github.com/rust-lang/crates.io-index" 2288 | checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" 2289 | 2290 | [[package]] 2291 | name = "unic-segment" 2292 | version = "0.9.0" 2293 | source = "registry+https://github.com/rust-lang/crates.io-index" 2294 | checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" 2295 | dependencies = [ 2296 | "unic-ucd-segment", 2297 | ] 2298 | 2299 | [[package]] 2300 | name = "unic-ucd-segment" 2301 | version = "0.9.0" 2302 | source = "registry+https://github.com/rust-lang/crates.io-index" 2303 | checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" 2304 | dependencies = [ 2305 | "unic-char-property", 2306 | "unic-char-range", 2307 | "unic-ucd-version", 2308 | ] 2309 | 2310 | [[package]] 2311 | name = "unic-ucd-version" 2312 | version = "0.9.0" 2313 | source = "registry+https://github.com/rust-lang/crates.io-index" 2314 | checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" 2315 | dependencies = [ 2316 | "unic-common", 2317 | ] 2318 | 2319 | [[package]] 2320 | name = "unicase" 2321 | version = "2.8.0" 2322 | source = "registry+https://github.com/rust-lang/crates.io-index" 2323 | checksum = "7e51b68083f157f853b6379db119d1c1be0e6e4dec98101079dec41f6f5cf6df" 2324 | 2325 | [[package]] 2326 | name = "unicode-ident" 2327 | version = "1.0.14" 2328 | source = "registry+https://github.com/rust-lang/crates.io-index" 2329 | checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" 2330 | 2331 | [[package]] 2332 | name = "unicode-width" 2333 | version = "0.1.14" 2334 | source = "registry+https://github.com/rust-lang/crates.io-index" 2335 | checksum = "7dd6e30e90baa6f72411720665d41d89b9a3d039dc45b8faea1ddd07f617f6af" 2336 | 2337 | [[package]] 2338 | name = "unicode-width" 2339 | version = "0.2.0" 2340 | source = "registry+https://github.com/rust-lang/crates.io-index" 2341 | checksum = "1fc81956842c57dac11422a97c3b8195a1ff727f06e85c84ed2e8aa277c9a0fd" 2342 | 2343 | [[package]] 2344 | name = "unicode_categories" 2345 | version = "0.1.1" 2346 | source = "registry+https://github.com/rust-lang/crates.io-index" 2347 | checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" 2348 | 2349 | [[package]] 2350 | name = "unsafe-libyaml" 2351 | version = "0.2.11" 2352 | source = "registry+https://github.com/rust-lang/crates.io-index" 2353 | checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861" 2354 | 2355 | [[package]] 2356 | name = "url" 2357 | version = "2.5.4" 2358 | source = "registry+https://github.com/rust-lang/crates.io-index" 2359 | checksum = "32f8b686cadd1473f4bd0117a5d28d36b1ade384ea9b5069a1c40aefed7fda60" 2360 | dependencies = [ 2361 | "form_urlencoded", 2362 | "idna", 2363 | "percent-encoding", 2364 | ] 2365 | 2366 | [[package]] 2367 | name = "utf-8" 2368 | version = "0.7.6" 2369 | source = "registry+https://github.com/rust-lang/crates.io-index" 2370 | checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9" 2371 | 2372 | [[package]] 2373 | name = "utf16_iter" 2374 | version = "1.0.5" 2375 | source = "registry+https://github.com/rust-lang/crates.io-index" 2376 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246" 2377 | 2378 | [[package]] 2379 | name = "utf8_iter" 2380 | version = "1.0.4" 2381 | source = "registry+https://github.com/rust-lang/crates.io-index" 2382 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be" 2383 | 2384 | [[package]] 2385 | name = "utf8parse" 2386 | version = "0.2.2" 2387 | source = "registry+https://github.com/rust-lang/crates.io-index" 2388 | checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" 2389 | 2390 | [[package]] 2391 | name = "v_htmlescape" 2392 | version = "0.15.8" 2393 | source = "registry+https://github.com/rust-lang/crates.io-index" 2394 | checksum = "4e8257fbc510f0a46eb602c10215901938b5c2a7d5e70fc11483b1d3c9b5b18c" 2395 | 2396 | [[package]] 2397 | name = "version_check" 2398 | version = "0.9.5" 2399 | source = "registry+https://github.com/rust-lang/crates.io-index" 2400 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a" 2401 | 2402 | [[package]] 2403 | name = "walkdir" 2404 | version = "2.5.0" 2405 | source = "registry+https://github.com/rust-lang/crates.io-index" 2406 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b" 2407 | dependencies = [ 2408 | "same-file", 2409 | "winapi-util", 2410 | ] 2411 | 2412 | [[package]] 2413 | name = "wasi" 2414 | version = "0.11.0+wasi-snapshot-preview1" 2415 | source = "registry+https://github.com/rust-lang/crates.io-index" 2416 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423" 2417 | 2418 | [[package]] 2419 | name = "wasm-bindgen" 2420 | version = "0.2.99" 2421 | source = "registry+https://github.com/rust-lang/crates.io-index" 2422 | checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" 2423 | dependencies = [ 2424 | "cfg-if", 2425 | "once_cell", 2426 | "wasm-bindgen-macro", 2427 | ] 2428 | 2429 | [[package]] 2430 | name = "wasm-bindgen-backend" 2431 | version = "0.2.99" 2432 | source = "registry+https://github.com/rust-lang/crates.io-index" 2433 | checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" 2434 | dependencies = [ 2435 | "bumpalo", 2436 | "log", 2437 | "proc-macro2", 2438 | "quote", 2439 | "syn", 2440 | "wasm-bindgen-shared", 2441 | ] 2442 | 2443 | [[package]] 2444 | name = "wasm-bindgen-macro" 2445 | version = "0.2.99" 2446 | source = "registry+https://github.com/rust-lang/crates.io-index" 2447 | checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" 2448 | dependencies = [ 2449 | "quote", 2450 | "wasm-bindgen-macro-support", 2451 | ] 2452 | 2453 | [[package]] 2454 | name = "wasm-bindgen-macro-support" 2455 | version = "0.2.99" 2456 | source = "registry+https://github.com/rust-lang/crates.io-index" 2457 | checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" 2458 | dependencies = [ 2459 | "proc-macro2", 2460 | "quote", 2461 | "syn", 2462 | "wasm-bindgen-backend", 2463 | "wasm-bindgen-shared", 2464 | ] 2465 | 2466 | [[package]] 2467 | name = "wasm-bindgen-shared" 2468 | version = "0.2.99" 2469 | source = "registry+https://github.com/rust-lang/crates.io-index" 2470 | checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" 2471 | 2472 | [[package]] 2473 | name = "winapi-util" 2474 | version = "0.1.9" 2475 | source = "registry+https://github.com/rust-lang/crates.io-index" 2476 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" 2477 | dependencies = [ 2478 | "windows-sys 0.59.0", 2479 | ] 2480 | 2481 | [[package]] 2482 | name = "windows-core" 2483 | version = "0.52.0" 2484 | source = "registry+https://github.com/rust-lang/crates.io-index" 2485 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9" 2486 | dependencies = [ 2487 | "windows-targets", 2488 | ] 2489 | 2490 | [[package]] 2491 | name = "windows-sys" 2492 | version = "0.52.0" 2493 | source = "registry+https://github.com/rust-lang/crates.io-index" 2494 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" 2495 | dependencies = [ 2496 | "windows-targets", 2497 | ] 2498 | 2499 | [[package]] 2500 | name = "windows-sys" 2501 | version = "0.59.0" 2502 | source = "registry+https://github.com/rust-lang/crates.io-index" 2503 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" 2504 | dependencies = [ 2505 | "windows-targets", 2506 | ] 2507 | 2508 | [[package]] 2509 | name = "windows-targets" 2510 | version = "0.52.6" 2511 | source = "registry+https://github.com/rust-lang/crates.io-index" 2512 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973" 2513 | dependencies = [ 2514 | "windows_aarch64_gnullvm", 2515 | "windows_aarch64_msvc", 2516 | "windows_i686_gnu", 2517 | "windows_i686_gnullvm", 2518 | "windows_i686_msvc", 2519 | "windows_x86_64_gnu", 2520 | "windows_x86_64_gnullvm", 2521 | "windows_x86_64_msvc", 2522 | ] 2523 | 2524 | [[package]] 2525 | name = "windows_aarch64_gnullvm" 2526 | version = "0.52.6" 2527 | source = "registry+https://github.com/rust-lang/crates.io-index" 2528 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3" 2529 | 2530 | [[package]] 2531 | name = "windows_aarch64_msvc" 2532 | version = "0.52.6" 2533 | source = "registry+https://github.com/rust-lang/crates.io-index" 2534 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469" 2535 | 2536 | [[package]] 2537 | name = "windows_i686_gnu" 2538 | version = "0.52.6" 2539 | source = "registry+https://github.com/rust-lang/crates.io-index" 2540 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b" 2541 | 2542 | [[package]] 2543 | name = "windows_i686_gnullvm" 2544 | version = "0.52.6" 2545 | source = "registry+https://github.com/rust-lang/crates.io-index" 2546 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66" 2547 | 2548 | [[package]] 2549 | name = "windows_i686_msvc" 2550 | version = "0.52.6" 2551 | source = "registry+https://github.com/rust-lang/crates.io-index" 2552 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66" 2553 | 2554 | [[package]] 2555 | name = "windows_x86_64_gnu" 2556 | version = "0.52.6" 2557 | source = "registry+https://github.com/rust-lang/crates.io-index" 2558 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78" 2559 | 2560 | [[package]] 2561 | name = "windows_x86_64_gnullvm" 2562 | version = "0.52.6" 2563 | source = "registry+https://github.com/rust-lang/crates.io-index" 2564 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d" 2565 | 2566 | [[package]] 2567 | name = "windows_x86_64_msvc" 2568 | version = "0.52.6" 2569 | source = "registry+https://github.com/rust-lang/crates.io-index" 2570 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec" 2571 | 2572 | [[package]] 2573 | name = "write16" 2574 | version = "1.0.0" 2575 | source = "registry+https://github.com/rust-lang/crates.io-index" 2576 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936" 2577 | 2578 | [[package]] 2579 | name = "writeable" 2580 | version = "0.5.5" 2581 | source = "registry+https://github.com/rust-lang/crates.io-index" 2582 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51" 2583 | 2584 | [[package]] 2585 | name = "xdg" 2586 | version = "2.5.2" 2587 | source = "registry+https://github.com/rust-lang/crates.io-index" 2588 | checksum = "213b7324336b53d2414b2db8537e56544d981803139155afa84f76eeebb7a546" 2589 | 2590 | [[package]] 2591 | name = "yaml-rust" 2592 | version = "0.4.5" 2593 | source = "registry+https://github.com/rust-lang/crates.io-index" 2594 | checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85" 2595 | dependencies = [ 2596 | "linked-hash-map", 2597 | ] 2598 | 2599 | [[package]] 2600 | name = "yoke" 2601 | version = "0.7.5" 2602 | source = "registry+https://github.com/rust-lang/crates.io-index" 2603 | checksum = "120e6aef9aa629e3d4f52dc8cc43a015c7724194c97dfaf45180d2daf2b77f40" 2604 | dependencies = [ 2605 | "serde", 2606 | "stable_deref_trait", 2607 | "yoke-derive", 2608 | "zerofrom", 2609 | ] 2610 | 2611 | [[package]] 2612 | name = "yoke-derive" 2613 | version = "0.7.5" 2614 | source = "registry+https://github.com/rust-lang/crates.io-index" 2615 | checksum = "2380878cad4ac9aac1e2435f3eb4020e8374b5f13c296cb75b4620ff8e229154" 2616 | dependencies = [ 2617 | "proc-macro2", 2618 | "quote", 2619 | "syn", 2620 | "synstructure", 2621 | ] 2622 | 2623 | [[package]] 2624 | name = "zerocopy" 2625 | version = "0.7.35" 2626 | source = "registry+https://github.com/rust-lang/crates.io-index" 2627 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" 2628 | dependencies = [ 2629 | "byteorder", 2630 | "zerocopy-derive", 2631 | ] 2632 | 2633 | [[package]] 2634 | name = "zerocopy-derive" 2635 | version = "0.7.35" 2636 | source = "registry+https://github.com/rust-lang/crates.io-index" 2637 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" 2638 | dependencies = [ 2639 | "proc-macro2", 2640 | "quote", 2641 | "syn", 2642 | ] 2643 | 2644 | [[package]] 2645 | name = "zerofrom" 2646 | version = "0.1.5" 2647 | source = "registry+https://github.com/rust-lang/crates.io-index" 2648 | checksum = "cff3ee08c995dee1859d998dea82f7374f2826091dd9cd47def953cae446cd2e" 2649 | dependencies = [ 2650 | "zerofrom-derive", 2651 | ] 2652 | 2653 | [[package]] 2654 | name = "zerofrom-derive" 2655 | version = "0.1.5" 2656 | source = "registry+https://github.com/rust-lang/crates.io-index" 2657 | checksum = "595eed982f7d355beb85837f651fa22e90b3c044842dc7f2c2842c086f295808" 2658 | dependencies = [ 2659 | "proc-macro2", 2660 | "quote", 2661 | "syn", 2662 | "synstructure", 2663 | ] 2664 | 2665 | [[package]] 2666 | name = "zerovec" 2667 | version = "0.10.4" 2668 | source = "registry+https://github.com/rust-lang/crates.io-index" 2669 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079" 2670 | dependencies = [ 2671 | "yoke", 2672 | "zerofrom", 2673 | "zerovec-derive", 2674 | ] 2675 | 2676 | [[package]] 2677 | name = "zerovec-derive" 2678 | version = "0.10.3" 2679 | source = "registry+https://github.com/rust-lang/crates.io-index" 2680 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6" 2681 | dependencies = [ 2682 | "proc-macro2", 2683 | "quote", 2684 | "syn", 2685 | ] 2686 | 2687 | [[package]] 2688 | name = "zstd" 2689 | version = "0.13.2" 2690 | source = "registry+https://github.com/rust-lang/crates.io-index" 2691 | checksum = "fcf2b778a664581e31e389454a7072dab1647606d44f7feea22cd5abb9c9f3f9" 2692 | dependencies = [ 2693 | "zstd-safe", 2694 | ] 2695 | 2696 | [[package]] 2697 | name = "zstd-safe" 2698 | version = "7.2.1" 2699 | source = "registry+https://github.com/rust-lang/crates.io-index" 2700 | checksum = "54a3ab4db68cea366acc5c897c7b4d4d1b8994a9cd6e6f841f8964566a419059" 2701 | dependencies = [ 2702 | "zstd-sys", 2703 | ] 2704 | 2705 | [[package]] 2706 | name = "zstd-sys" 2707 | version = "2.0.13+zstd.1.5.6" 2708 | source = "registry+https://github.com/rust-lang/crates.io-index" 2709 | checksum = "38ff0f21cfee8f97d94cef41359e0c89aa6113028ab0291aa8ca0038995a95aa" 2710 | dependencies = [ 2711 | "cc", 2712 | "pkg-config", 2713 | ] 2714 | --------------------------------------------------------------------------------