├── 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 |
33 | {{ post.date | date(format='%B %d, %Y') }}
34 |
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("");
175 | result.push_str(&element.name);
176 | 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 |
--------------------------------------------------------------------------------