├── .gitattributes
├── .errorviz-version
├── src
├── security
│ └── mod.rs
├── optimizations.rs
├── distribution.rs
├── deploy.rs
├── gradient.rs
├── config
│ ├── haproxy.rs
│ └── nginx.rs
└── infrastructure
│ └── mod.rs
├── test_deploy
├── rustify.tar.gz
├── .dockerignore
├── .vscode
└── settings.json
├── quota.yaml
├── .mergify.yml
├── app-metadata.json
├── k8s-service.yaml
├── monitoring.yaml
├── package.json
├── next.config.js
├── haproxy.cfg
├── pages
└── index.js
├── hpa.yaml
├── .container-metadata.json
├── docker-compose.yml
├── CHANGELOG.md
├── supervisord.conf
├── .gitignore
├── test-deployment.yaml
├── index.js
├── k8s-deployment.yaml
├── Cargo.toml
├── todo-list.json
├── Dockerfile
├── .github
└── workflows
│ ├── ci.yml
│ └── release.yml
├── install.sh
├── test_deploy.rs
├── README.md
└── Cargo.lock
/.gitattributes:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.errorviz-version:
--------------------------------------------------------------------------------
1 | 0.1.1
--------------------------------------------------------------------------------
/src/security/mod.rs:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/test_deploy:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/duggal1/rustify/HEAD/test_deploy
--------------------------------------------------------------------------------
/rustify.tar.gz:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/duggal1/rustify/HEAD/rustify.tar.gz
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | npm-debug.log
3 | Dockerfile
4 | .dockerignore
5 | .git
6 | .gitignore
7 | README.md
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "git.ignoreLimitWarning": true,
3 | "rust-analyzer.diagnostics.useRustcErrorCode": true,
4 | "cSpell.words": [
5 | "astro",
6 | "Highly",
7 | "optimize"
8 | ]
9 | }
--------------------------------------------------------------------------------
/quota.yaml:
--------------------------------------------------------------------------------
1 |
2 | apiVersion: v1
3 | kind: ResourceQuota
4 | metadata:
5 | name: compute-quota
6 | spec:
7 | hard:
8 | requests.cpu: "4"
9 | requests.memory: 8Gi
10 | limits.cpu: "8"
11 | limits.memory: 16Gi
--------------------------------------------------------------------------------
/.mergify.yml:
--------------------------------------------------------------------------------
1 | pull_request_rules:
2 | - name: Automatic merge
3 | description: Merge when PR passes all branch protection and has label automerge
4 | conditions:
5 | - label = automerge
6 | actions:
7 | merge:
8 |
--------------------------------------------------------------------------------
/app-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "app_name": "test-app",
3 | "app_type": "nextjs",
4 | "port": "3000",
5 | "created_at": "2024-03-20T00:00:00Z",
6 | "kubernetes_enabled": true,
7 | "status": "pending"
8 | }
--------------------------------------------------------------------------------
/k8s-service.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: v1
2 | kind: Service
3 | metadata:
4 | name: myapp-service
5 | namespace: production
6 | spec:
7 | selector:
8 | app: myapp
9 | ports:
10 | - port: 3000
11 | targetPort: 3000
12 | type: ClusterIP
--------------------------------------------------------------------------------
/monitoring.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: monitoring.coreos.com/v1
2 | kind: ServiceMonitor
3 | metadata:
4 | name: myapp-monitor
5 | namespace: production
6 | spec:
7 | selector:
8 | matchLabels:
9 | app: myapp
10 | endpoints:
11 | - port: metrics
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nextjs-app",
3 | "version": "1.0.0",
4 | "scripts": {
5 | "dev": "next dev -p 3000",
6 | "build": "next build",
7 | "start": "next start -p 3000"
8 | },
9 | "dependencies": {
10 | "next": "latest",
11 | "react": "latest",
12 | "react-dom": "latest"
13 | }
14 | }
--------------------------------------------------------------------------------
/next.config.js:
--------------------------------------------------------------------------------
1 |
2 | module.exports = {
3 | reactStrictMode: true,
4 | webpack: (config) => {
5 | config.optimization = {
6 | minimize: true,
7 | splitChunks: {
8 | chunks: 'all',
9 | },
10 | };
11 | return config;
12 | },
13 | };
14 |
--------------------------------------------------------------------------------
/haproxy.cfg:
--------------------------------------------------------------------------------
1 |
2 | backend apps
3 | balance first
4 | hash-type consistent
5 | stick-table type string len 32 size 100k expire 30m
6 | stick store-request req.cook(sessionid)
7 | option httpchk HEAD /health HTTP/1.1\r\nHost:\ localhost
8 | http-check expect status 200
9 | server-template app- 20 127.0.0.1:3000-3020 check resolvers docker init-addr none
10 |
--------------------------------------------------------------------------------
/pages/index.js:
--------------------------------------------------------------------------------
1 |
2 | import Head from 'next/head'
3 |
4 | export default function Home() {
5 | return (
6 |
7 |
8 |
Next.js App
9 |
10 |
11 |
12 |
13 | Welcome to Next.js!
14 | Your app is running on port 3000
15 |
16 |
17 | )
18 | }
19 |
--------------------------------------------------------------------------------
/hpa.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: autoscaling/v2
2 | kind: HorizontalPodAutoscaler
3 | metadata:
4 | name: myapp-hpa
5 | namespace: production
6 | spec:
7 | scaleTargetRef:
8 | apiVersion: apps/v1
9 | kind: Deployment
10 | name: myapp-deployment
11 | minReplicas: 3
12 | maxReplicas: 10
13 | metrics:
14 | - type: Resource
15 | resource:
16 | name: cpu
17 | target:
18 | type: Utilization
19 | averageUtilization: 70
--------------------------------------------------------------------------------
/.container-metadata.json:
--------------------------------------------------------------------------------
1 | {
2 | "app_name": "myapp",
3 | "app_type": "nextjs",
4 | "port": "3000",
5 | "created_at": "2024-11-13T00:20:19.110798+05:30",
6 | "container_id": "e364c19fd077711cace1c3d0249c234a51e9ced0279c82098090e4ad36f44b7c",
7 | "status": "running",
8 | "kubernetes": {
9 | "namespace": "",
10 | "deployment_name": "",
11 | "service_name": "",
12 | "replicas": 1,
13 | "pod_status": [],
14 | "ingress_host": null
15 | }
16 | }
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.8'
2 | services:
3 | app:
4 | build: .
5 | ports:
6 | - "8000:8000"
7 | environment:
8 | - PORT=8000
9 | - BUN_ENV=production
10 | healthcheck:
11 | test: ["CMD", "bun", "run", "index.js", "--health"]
12 | interval: 30s
13 | timeout: 10s
14 | retries: 3
15 | start_period: 10s
16 | restart: unless-stopped
17 | logging:
18 | driver: "json-file"
19 | options:
20 | max-size: "10m"
21 | max-file: "3"
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | ## [0.2.0] - 2024-XX-XX
4 |
5 | ### Added
6 |
7 | - Framework-specific optimizations
8 | - Docker integration checks
9 | - Enhanced CI/CD workflows
10 | - Improved error handling
11 | - Kubernetes readiness checks
12 |
13 | ### Changed
14 |
15 | - Updated installation script with Docker support
16 | - Improved build process
17 | - Enhanced security checks
18 | - Better dependency management
19 |
20 | ### Fixed
21 |
22 | - Docker configuration issues
23 | - Framework detection accuracy
24 | - Installation path handling issues
25 |
--------------------------------------------------------------------------------
/supervisord.conf:
--------------------------------------------------------------------------------
1 | [supervisord]
2 | nodaemon=true
3 | logfile=/var/log/supervisord.log
4 | pidfile=/var/run/supervisord.pid
5 |
6 | [program:nginx]
7 | command=nginx -g 'daemon off;'
8 | autostart=true
9 | autorestart=true
10 | stdout_logfile=/dev/stdout
11 | stdout_logfile_maxbytes=0
12 | stderr_logfile=/dev/stderr
13 | stderr_logfile_maxbytes=0
14 |
15 | [program:app]
16 | command=npm start
17 | directory=/app
18 | autostart=true
19 | autorestart=true
20 | stdout_logfile=/dev/stdout
21 | stdout_logfile_maxbytes=0
22 | stderr_logfile=/dev/stderr
23 | stderr_logfile_maxbytes=0
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Generated by Cargo
2 | /target/
3 |
4 | # Remove Cargo.lock from gitignore if creating an executable, leave it for libraries
5 | # More information here https://doc.rust-lang.org/cargo/guide/cargo-toml-vs-cargo-lock.html
6 | Cargo.lock
7 |
8 | # These are backup files generated by rustfmt
9 | **/*.rs.bk
10 |
11 | # IDE specific files
12 | .idea/
13 | .vscode/
14 | *.swp
15 | *.swo
16 |
17 | # Environment files
18 | .env
19 | .env.local
20 |
21 | # OS specific files
22 | .DS_Store
23 | .DS_Store?
24 | ._*
25 | .Spotlight-V100
26 | .Trashes
27 | ehthumbs.db
28 | Thumbs.db
29 |
--------------------------------------------------------------------------------
/src/optimizations.rs:
--------------------------------------------------------------------------------
1 | pub fn create_framework_specific_config(app_type: &str) -> io::Result<()> {
2 | match app_type {
3 | "nextjs" => create_nextjs_optimized_config()?,
4 | "react" => create_react_optimized_config()?,
5 | "vue" => create_vue_optimized_config()?,
6 | "svelte" => create_svelte_optimized_config()?,
7 | "angular" => create_angular_optimized_config()?,
8 | "astro" => create_astro_optimized_config()?,
9 | "remix" => create_remix_optimized_config()?,
10 | "mern" => create_mern_optimized_config()?,
11 | _ => return Ok(()),
12 | }
13 | Ok(())
14 | }
--------------------------------------------------------------------------------
/test-deployment.yaml:
--------------------------------------------------------------------------------
1 |
2 | apiVersion: apps/v1
3 | kind: Deployment
4 | metadata:
5 | name: rustify-test
6 | namespace: default
7 | spec:
8 | replicas: 1
9 | selector:
10 | matchLabels:
11 | app: rustify-test
12 | template:
13 | metadata:
14 | labels:
15 | app: rustify-test
16 | spec:
17 | containers:
18 | - name: test-container
19 | image: nginx:latest
20 | ports:
21 | - containerPort: 80
22 | resources:
23 | requests:
24 | memory: "64Mi"
25 | cpu: "250m"
26 | limits:
27 | memory: "128Mi"
28 | cpu: "500m"
29 | readinessProbe:
30 | httpGet:
31 | path: /
32 | port: 80
33 |
--------------------------------------------------------------------------------
/index.js:
--------------------------------------------------------------------------------
1 | console.log(`Server running on port ${process.env.PORT}`);
2 | const express = require('express');
3 | const app = express();
4 | const path = require('path');
5 |
6 | // Serve static files from public directory
7 | app.use(express.static('public'));
8 |
9 | // Modern JSON API endpoint
10 | app.get('/api/hello', (req, res) => {
11 | res.json({
12 | message: '✅ Hello from your modern containerized app! ✨',
13 | version: '1.0.0',
14 | timestamp: new Date().toISOString()
15 | });
16 | });
17 |
18 | // Serve modern SPA frontend
19 | app.get('/', (req, res) => {
20 | res.sendFile(path.join(__dirname, 'public', 'index.html'));
21 | });
22 |
23 | const PORT = process.env.PORT || 3000;
24 | app.listen(PORT, () => {
25 | console.log(`🚀 Modern server running at http://localhost:${PORT}`);
26 | });
--------------------------------------------------------------------------------
/k8s-deployment.yaml:
--------------------------------------------------------------------------------
1 | apiVersion: apps/v1
2 | kind: Deployment
3 | metadata:
4 | name: myapp-deployment
5 | namespace: production
6 | spec:
7 | replicas: 3
8 | selector:
9 | matchLabels:
10 | app: myapp
11 | template:
12 | metadata:
13 | labels:
14 | app: myapp
15 | spec:
16 | containers:
17 | - name: myapp
18 | image: myapp:latest
19 | imagePullPolicy: Never
20 | ports:
21 | - containerPort: 3000
22 | protocol: TCP
23 | env:
24 | - name: PORT
25 | value: "3000"
26 | resources:
27 | limits:
28 | cpu: "500m"
29 | memory: "512Mi"
30 | requests:
31 | cpu: "250m"
32 | memory: "256Mi"
33 | livenessProbe:
34 | httpGet:
35 | path: /health
36 | port: 3000
37 | initialDelaySeconds: 15
38 | periodSeconds: 20
39 | readinessProbe:
40 | httpGet:
41 | path: /health
42 | port: 3000
43 | initialDelaySeconds: 5
44 | periodSeconds: 10
--------------------------------------------------------------------------------
/Cargo.toml:
--------------------------------------------------------------------------------
1 | [package]
2 | name = "rustify"
3 | version = "2.0.6"
4 | authors = ["Harshit Duggal "]
5 | edition = "2021"
6 | description = "**An advanced CLI tool for streamlining containerization, orchestration, scaling, and server proxy**"
7 |
8 | [features]
9 | default = ["vendored", "k8s-v1-26"]
10 | vendored = ["openssl-sys/vendored"]
11 | k8s-v1-26 = ["k8s-openapi/v1_26"]
12 |
13 | [dependencies]
14 | chrono = "0.4"
15 | serde = { version = "1.0", features = ["derive"] }
16 | serde_json = "1.0"
17 | walkdir = "2.4.0"
18 | whoami = "1.4"
19 | colored = "2.0.4"
20 | tokio = { version = "1.0", features = ["full"] }
21 | k8s-openapi = { version = "0.18.0", features = ["v1_26"] }
22 | kube = { version = "0.82.0", features = ["runtime", "derive"] }
23 | futures = "0.3"
24 | parking_lot = "0.12"
25 | dashmap = "5.4"
26 | proc-macro2 = "1.0"
27 | quote = "1.0"
28 | syn = { version = "2.0", features = ["full"] }
29 | clap = "3.2"
30 | openssl = "0.10"
31 | openssl-sys = "0.9"
32 | async-trait = "0.1"
33 |
34 | [profile.release]
35 | opt-level = 3
36 | lto = true
37 | codegen-units = 1
38 | panic = 'abort'
39 | strip = true
40 |
--------------------------------------------------------------------------------
/todo-list.json:
--------------------------------------------------------------------------------
1 | {
2 | "TODO": "Additional Improvements",
3 | "improvements": {
4 | "Database Integration": [
5 | "Add PostgreSQL/MongoDB clustering",
6 | "Implement automatic backups",
7 | "Add connection pooling"
8 | ],
9 | "CI/CD Pipeline": [
10 | "Add GitHub Actions integration",
11 | "Implement automatic testing",
12 | "Add rollback mechanisms"
13 | ],
14 | "Advanced Monitoring": [
15 | "Add ELK stack integration",
16 | "Implement distributed tracing",
17 | "Add custom metrics dashboard"
18 | ],
19 | "Disaster Recovery": [
20 | "Implement automatic failover",
21 | "Add geographic redundancy",
22 | "Create backup verification"
23 | ],
24 | "Performance": [
25 | "Add CDN integration",
26 | "Implement edge computing",
27 | "Add WebAssembly optimization"
28 | ],
29 | "Security": [
30 | "Add WAF integration",
31 | "Implement secrets management",
32 | "Add compliance scanning"
33 | ],
34 | "Developer Experience": [
35 | "Add development templates",
36 | "Improve error messages",
37 | "Add interactive setup mode"
38 | ]
39 | }
40 | }
--------------------------------------------------------------------------------
/src/distribution.rs:
--------------------------------------------------------------------------------
1 | use std::process::Command;
2 | use std::{fs, io};
3 |
4 | pub fn create_distribution() -> io::Result<()> {
5 | println!("📦 Creating distribution packages...");
6 |
7 | // Create dist directory
8 | fs::create_dir_all("dist")?;
9 |
10 | // Build for different platforms
11 | let targets = vec![
12 | ("x86_64-unknown-linux-gnu", "rustify-linux-amd64"),
13 | ("x86_64-apple-darwin", "rustify-darwin-amd64"),
14 | ("aarch64-apple-darwin", "rustify-darwin-arm64"),
15 | ];
16 |
17 | for (target, binary_name) in targets {
18 | println!("Building for {}", target);
19 | Command::new("cargo")
20 | .args(["build", "--release", "--target", target])
21 | .status()?;
22 |
23 | // Package binary
24 | let source = format!("target/{}/release/rustify", target);
25 | let dest = format!("dist/{}.tar.gz", binary_name);
26 |
27 | Command::new("tar")
28 | .args(["-czf", &dest, "-C", &format!("target/{}/release", target), "rustify"])
29 | .status()?;
30 |
31 | // Create checksum
32 | Command::new("shasum")
33 | .args(["-a", "256", &dest])
34 | .output()?;
35 | }
36 |
37 | println!("✅ Distribution packages created in ./dist");
38 | Ok(())
39 | }
--------------------------------------------------------------------------------
/src/deploy.rs:
--------------------------------------------------------------------------------
1 | fn deploy_application(metadata: &mut AppMetadata, is_prod: bool, auto_scale: bool) -> io::Result<()> {
2 | println!("🚀 Starting enterprise-grade deployment...");
3 |
4 | // Initialize security
5 | let security_config = security::SecurityConfig {
6 | enable_mtls: true,
7 | zero_trust: true,
8 | waf_rules: security::WafRules::enterprise(),
9 | tls_config: security::TlsConfig::v1_3_only(),
10 | };
11 |
12 | // Initialize monitoring
13 | let monitoring = monitoring::MonitoringStack::new()
14 | .with_prometheus()
15 | .with_grafana()
16 | .with_datadog()
17 | .with_tracing();
18 |
19 | // Initialize caching
20 | let cache_config = caching::CacheConfig {
21 | redis_cluster: true,
22 | varnish_enabled: true,
23 | edge_caching: true,
24 | cdn_provider: Some("cloudflare"),
25 | };
26 |
27 | // Initialize event streaming
28 | let streaming = streaming::EventStream::new()
29 | .with_kafka()
30 | .with_nats()
31 | .with_redis_streams();
32 |
33 | if is_prod {
34 | // Production deployment with Kubernetes
35 | deploy_production(metadata, auto_scale, security_config, monitoring)?;
36 | } else {
37 | // Development deployment with Docker
38 | deploy_development(metadata, security_config, monitoring)?;
39 | }
40 |
41 | println!("✅ Enterprise deployment complete!");
42 | Ok(())
43 | }
--------------------------------------------------------------------------------
/src/gradient.rs:
--------------------------------------------------------------------------------
1 | use colored::*;
2 |
3 | pub struct GradientText;
4 |
5 | #[allow(dead_code)]
6 | impl GradientText {
7 | pub fn info(text: &str) -> String {
8 | text.bright_blue().bold().to_string()
9 | }
10 |
11 | pub fn success(text: &str) -> String {
12 | text.bright_green().bold().to_string()
13 | }
14 |
15 | pub fn warning(text: &str) -> String {
16 | text.bright_yellow().bold().to_string()
17 | }
18 |
19 | pub fn error(text: &str) -> String {
20 | text.bright_red().bold().to_string()
21 | }
22 |
23 | pub fn cyber(text: &str) -> String {
24 | let colors = [
25 | "38;2;0;255;255",
26 | "38;2;255;0;255", // Magenta
27 | "38;2;0;255;127", // Spring Green
28 | ];
29 | Self::gradient_text(text, &colors)
30 | }
31 |
32 | pub fn rainbow(text: &str) -> String {
33 | let colors = [
34 | "38;2;255;0;0", // Red
35 | "38;2;255;127;0", // Orange
36 | "38;2;255;255;0", // Yellow
37 | "38;2;0;255;0", // Green
38 | "38;2;0;0;255", // Blue
39 | "38;2;139;0;255", // Violet
40 | ];
41 | Self::gradient_text(text, &colors)
42 | }
43 |
44 | pub fn status(text: &str) -> String {
45 | let colors = [
46 | "38;2;100;149;237", // Cornflower Blue
47 | "38;2;0;191;255", // Deep Sky Blue
48 | ];
49 | Self::gradient_text(text, &colors)
50 | }
51 |
52 | fn gradient_text(text: &str, colors: &[&str]) -> String {
53 | let mut colored_text = String::new();
54 | for (i, c) in text.chars().enumerate() {
55 | let color_index = i % colors.len();
56 | colored_text.push_str(&format!("\x1b[{}m{}", colors[color_index], c));
57 | }
58 | colored_text.push_str("\x1b[0m");
59 | colored_text
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/config/haproxy.rs:
--------------------------------------------------------------------------------
1 | fn generate_haproxy_config(mode: &str) -> String {
2 | format!(r#"global
3 | maxconn 500000
4 | ssl-default-bind-ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256
5 | ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11
6 | tune.ssl.default-dh-param 2048
7 | stats socket /var/run/haproxy.sock mode 600 expose-fd listeners
8 | stats timeout 30s
9 | cpu-map auto:1/1-4 0-3
10 | numa-cpu-mapping
11 | tune.bufsize 32768
12 | tune.maxrewrite 8192
13 | tune.ssl.cachesize 100000
14 |
15 | defaults
16 | mode http
17 | option httplog
18 | option dontlognull
19 | option http-server-close
20 | option redispatch
21 | retries 3
22 | timeout http-request 10s
23 | timeout queue 20s
24 | timeout connect 10s
25 | timeout client 1h
26 | timeout server 1h
27 | timeout http-keep-alive 10s
28 | timeout check 10s
29 | maxconn 100000
30 |
31 | frontend main
32 | bind *:80
33 | bind *:443 ssl crt /etc/ssl/certs/cert.pem alpn h2,http/1.1
34 |
35 | # Security headers
36 | http-response set-header Strict-Transport-Security "max-age=63072000"
37 | http-response set-header X-Frame-Options "DENY"
38 | http-response set-header X-Content-Type-Options "nosniff"
39 |
40 | # WAF rules
41 | filter spoe engine modsecurity
42 | tcp-request inspect-delay 5s
43 | tcp-request content accept if { req.len gt 0 }
44 |
45 | # Rate limiting
46 | stick-table type ip size 1m expire 1h store gpc0,http_req_rate(10s)
47 | tcp-request content track-sc0 src
48 | tcp-request content reject if { sc_http_req_rate(0) gt 100 }
49 |
50 | # Advanced routing
51 | use_backend bun_backend if { path_beg /api }
52 | use_backend static_backend if { path_end .jpg .png .css .js }
53 | default_backend dynamic_backend
54 |
55 | backend bun_backend
56 | balance leastconn
57 | option httpchk GET /health HTTP/1.1\r\nHost:\ localhost
58 | http-check expect status 200
59 | server bun1 127.0.0.1:3000 check ssl verify none maxconn 50000
60 | server bun2 127.0.0.1:3001 check ssl verify none maxconn 50000
61 | compression algo gzip
62 | compression type text/html text/plain application/json
63 | "#)
64 | }
--------------------------------------------------------------------------------
/src/config/nginx.rs:
--------------------------------------------------------------------------------
1 | fn generate_nginx_config(mode: &str) -> String {
2 | let worker_processes = if mode == "prod" { "auto" } else { "4" };
3 |
4 | format!(r#"
5 | user nginx;
6 | worker_processes {worker_processes};
7 | worker_rlimit_nofile 1000000;
8 | pcre_jit on;
9 |
10 | events {{
11 | worker_connections 65535;
12 | use epoll;
13 | multi_accept on;
14 | }}
15 |
16 | http {{
17 | # Basic Settings
18 | sendfile on;
19 | tcp_nopush on;
20 | tcp_nodelay on;
21 | keepalive_timeout 65;
22 | keepalive_requests 1000;
23 | types_hash_max_size 2048;
24 | server_tokens off;
25 |
26 | # Buffer Settings
27 | client_body_buffer_size 128k;
28 | client_max_body_size 50M;
29 | client_header_buffer_size 1k;
30 | large_client_header_buffers 4 32k;
31 | output_buffers 1 32k;
32 | postpone_output 1460;
33 |
34 | # Caching Settings
35 | open_file_cache max=200000 inactive=20s;
36 | open_file_cache_valid 30s;
37 | open_file_cache_min_uses 2;
38 | open_file_cache_errors on;
39 |
40 | # Compression
41 | gzip on;
42 | gzip_comp_level 5;
43 | gzip_min_length 256;
44 | gzip_proxied any;
45 | gzip_vary on;
46 | gzip_types
47 | application/javascript
48 | application/json
49 | application/ld+json
50 | application/manifest+json
51 | application/xml
52 | font/woff
53 | font/woff2
54 | image/svg+xml
55 | text/css
56 | text/javascript
57 | text/plain
58 | text/xml;
59 |
60 | # Security Headers
61 | add_header X-Frame-Options "SAMEORIGIN" always;
62 | add_header X-XSS-Protection "1; mode=block" always;
63 | add_header X-Content-Type-Options "nosniff" always;
64 | add_header Referrer-Policy "no-referrer-when-downgrade" always;
65 | add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;
66 | add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
67 |
68 | # SSL Settings
69 | ssl_protocols TLSv1.2 TLSv1.3;
70 | ssl_prefer_server_ciphers on;
71 | ssl_session_cache shared:SSL:50m;
72 | ssl_session_timeout 1d;
73 | ssl_session_tickets off;
74 | ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256;
75 | "#)
76 | }
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 |
2 | # Multi-stage build for optimization
3 | FROM node:18-alpine AS builder
4 |
5 | # Install system dependencies
6 | RUN apk add --no-cache \
7 | bash \
8 | curl \
9 | nginx \
10 | supervisor \
11 | redis \
12 | postgresql-client \
13 | git \
14 | python3 \
15 | make \
16 | g++
17 |
18 | # Install Bun with version pinning
19 | ARG BUN_VERSION=1.0.0
20 | RUN curl -fsSL https://bun.sh/install | bash -s "bun-v${BUN_VERSION}"
21 | ENV PATH="/root/.bun/bin:${PATH}"
22 |
23 | # Set up performance monitoring
24 | RUN npm install -g clinic autocannon
25 |
26 | # Production optimizations
27 | ENV NODE_ENV=production
28 | ENV BUN_JS_ALLOCATIONS=1000000
29 | ENV BUN_RUNTIME_CALLS=100000
30 | ENV NEXT_TELEMETRY_DISABLED=1
31 |
32 | WORKDIR /app
33 |
34 | # Copy the entire project
35 | COPY . .
36 |
37 | # Preserve user's package.json but add optimizations if needed
38 | RUN if [ -f "package.json" ]; then \
39 | # Backup original package.json
40 | cp package.json package.json.original && \
41 | # Add optimization scripts if they don't exist
42 | jq '. * {"scripts": {. .scripts + {"analyze": "ANALYZE=true next build"}}}' package.json.original > package.json; \
43 | fi
44 |
45 | # Install dependencies based on existing package-lock.json or yarn.lock
46 | RUN if [ -f "yarn.lock" ]; then \
47 | yarn install --frozen-lockfile --production; \
48 | elif [ -f "package-lock.json" ]; then \
49 | npm ci --production; \
50 | else \
51 | bun install --production; \
52 | fi
53 |
54 | # Build the application
55 | RUN bun run build
56 |
57 | # Production image
58 | FROM node:18-alpine AS runner
59 | WORKDIR /app
60 |
61 | # Copy necessary files from builder
62 | COPY --from=builder /app/.next ./.next
63 | COPY --from=builder /app/public ./public
64 | COPY --from=builder /app/package.json ./package.json
65 | COPY --from=builder /app/next.config.js ./next.config.js
66 | COPY --from=builder /app/node_modules ./node_modules
67 | COPY --from=builder /root/.bun /root/.bun
68 |
69 | # Copy all other project files except those in .dockerignore
70 | COPY --from=builder /app/. .
71 |
72 | # Install production dependencies only
73 | ENV NODE_ENV=production
74 | ENV PATH="/root/.bun/bin:${PATH}"
75 |
76 | # Runtime optimizations
77 | ENV BUN_JS_ALLOCATIONS=1000000
78 | ENV BUN_RUNTIME_CALLS=100000
79 | ENV NEXT_TELEMETRY_DISABLED=1
80 |
81 | # Set up health check
82 | HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \
83 | CMD curl -f http://localhost:3000/api/health || exit 1
84 |
85 | # Expose ports
86 | EXPOSE 3000
87 |
88 | # Start the application with clustering
89 | CMD ["bun", "run", "start"]
--------------------------------------------------------------------------------
/.github/workflows/ci.yml:
--------------------------------------------------------------------------------
1 | name: CI/CD Pipeline
2 |
3 | on:
4 | push:
5 | branches: [ main, develop ]
6 | pull_request:
7 | branches: [ main, develop ]
8 |
9 | env:
10 | CARGO_TERM_COLOR: always
11 | CARGO_INCREMENTAL: 0
12 |
13 | jobs:
14 | test:
15 | strategy:
16 | fail-fast: false
17 | matrix:
18 | os: [ubuntu-latest, windows-latest, macos-latest]
19 |
20 | runs-on: ${{ matrix.os }}
21 | steps:
22 | - uses: actions/checkout@v3
23 |
24 | - name: Cache dependencies
25 | uses: actions/cache@v3
26 | with:
27 | path: |
28 | ~/.cargo/registry
29 | ~/.cargo/git
30 | target
31 | key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
32 |
33 | # Windows-specific setup
34 | - name: Setup Windows dependencies
35 | if: matrix.os == 'windows-latest'
36 | run: |
37 | vcpkg integrate install
38 | vcpkg install openssl:x64-windows-static
39 | echo "OPENSSL_DIR=$env:VCPKG_INSTALLATION_ROOT\installed\x64-windows-static" >> $env:GITHUB_ENV
40 | echo "OPENSSL_STATIC=1" >> $env:GITHUB_ENV
41 | shell: pwsh
42 |
43 | # macOS-specific setup
44 | - name: Setup macOS dependencies
45 | if: matrix.os == 'macos-latest'
46 | run: |
47 | brew install openssl@3
48 | echo "OPENSSL_ROOT_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV
49 | echo "OPENSSL_INCLUDE_DIR=$(brew --prefix openssl@3)/include" >> $GITHUB_ENV
50 | echo "OPENSSL_LIB_DIR=$(brew --prefix openssl@3)/lib" >> $GITHUB_ENV
51 |
52 | - name: Install Rust
53 | uses: actions-rs/toolchain@v1
54 | with:
55 | toolchain: stable
56 | override: true
57 | components: rustfmt, clippy
58 |
59 | # Add host target explicitly
60 | - name: Add host target
61 | run: |
62 | rustup target add ${{ matrix.os == 'windows-latest' && 'x86_64-pc-windows-msvc' || matrix.os == 'macos-latest' && 'x86_64-apple-darwin' || 'x86_64-unknown-linux-gnu' }}
63 |
64 | - name: Check formatting
65 | continue-on-error: true
66 | uses: actions-rs/cargo@v1
67 | with:
68 | command: fmt
69 | args: -- --check
70 |
71 | - name: Run clippy
72 | continue-on-error: true
73 | uses: actions-rs/cargo@v1
74 | with:
75 | command: clippy
76 | args: -- -D warnings
77 |
78 | # Modified test step
79 | - name: Run tests
80 | uses: actions-rs/cargo@v1
81 | env:
82 | CARGO_TERM_COLOR: always
83 | CARGO_INCREMENTAL: 0
84 | RUSTFLAGS: "-C target-feature=+crt-static"
85 | RUST_BACKTRACE: 1
86 | CARGO_NET_RETRY: 10
87 | with:
88 | command: test
89 | args: --all-features --target ${{ matrix.os == 'windows-latest' && 'x86_64-pc-windows-msvc' || matrix.os == 'macos-latest' && 'x86_64-apple-darwin' || 'x86_64-unknown-linux-gnu' }}
--------------------------------------------------------------------------------
/install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 | set -eo pipefail
3 |
4 | # Print colorful messages with gradient effect
5 | GREEN='\033[0;32m'
6 | BLUE='\033[0;34m'
7 | PURPLE='\033[0;35m'
8 | CYAN='\033[0;36m'
9 | RED='\033[0;31m'
10 | NC='\033[0m' # No Color
11 |
12 | echo -e "${PURPLE}✨ ${CYAN}Installing rustify CLI v2.0.6...${NC}"
13 |
14 | # Add error handling for curl commands
15 | curl_with_retry() {
16 | local retry=0
17 | local max_retries=3
18 | local timeout=10
19 | while [ $retry -lt $max_retries ]; do
20 | if curl -fsSL --connect-timeout $timeout "$@"; then
21 | return 0
22 | fi
23 | retry=$((retry + 1))
24 | echo -e "${CYAN}Retry $retry/$max_retries...${NC}"
25 | sleep 2
26 | done
27 | return 1
28 | }
29 |
30 | # GitHub repository information
31 | GITHUB_REPO="duggal1/rustify"
32 | LATEST_URL="https://api.github.com/repos/${GITHUB_REPO}/releases/latest"
33 |
34 | # Verify release exists
35 | echo -e "${CYAN}🔍 Verifying release...${NC}"
36 | RELEASE_CHECK=$(curl -s -o /dev/null -w "%{http_code}" $LATEST_URL)
37 | if [ "$RELEASE_CHECK" != "200" ]; then
38 | echo -e "${RED}❌ Unable to access release. Please check:${NC}"
39 | echo -e "${BLUE}https://github.com/${GITHUB_REPO}/releases${NC}"
40 | exit 1
41 | fi
42 |
43 | # Get latest version
44 | VERSION=$(curl -s $LATEST_URL | grep '"tag_name":' | sed -E 's/.*"([^"]+)".*/\1/')
45 | if [ -z "$VERSION" ]; then
46 | echo -e "${RED}❌ Failed to fetch latest version${NC}"
47 | exit 1
48 | fi
49 |
50 | echo -e "${CYAN}📦 Latest version: ${VERSION}${NC}"
51 |
52 | # Detect OS and architecture
53 | OS=$(uname -s | tr '[:upper:]' '[:lower:]')
54 | ARCH=$(uname -m)
55 |
56 | case "$OS" in
57 | "linux")
58 | OS_NAME="linux"
59 | ;;
60 | "darwin")
61 | OS_NAME="darwin"
62 | ;;
63 | *)
64 | echo -e "${RED}❌ Unsupported operating system: $OS${NC}"
65 | exit 1
66 | ;;
67 | esac
68 |
69 | case "$ARCH" in
70 | "x86_64")
71 | ARCH_NAME="amd64"
72 | ;;
73 | "aarch64" | "arm64")
74 | ARCH_NAME="arm64"
75 | ;;
76 | *)
77 | echo -e "${RED}❌ Unsupported architecture: $ARCH${NC}"
78 | exit 1
79 | ;;
80 | esac
81 |
82 | BINARY_NAME="rustify-${OS_NAME}-${ARCH_NAME}.tar.gz"
83 | DOWNLOAD_URL="https://github.com/${GITHUB_REPO}/releases/download/${VERSION}/${BINARY_NAME}"
84 |
85 | # Create temporary directory
86 | TMP_DIR=$(mktemp -d)
87 | trap 'rm -rf "$TMP_DIR"' EXIT
88 |
89 | # Download binary
90 | echo -e "${CYAN}⬇️ Downloading rustify...${NC}"
91 | if ! curl -L --progress-bar "$DOWNLOAD_URL" -o "$TMP_DIR/$BINARY_NAME"; then
92 | echo -e "${RED}❌ Download failed${NC}"
93 | exit 1
94 | fi
95 |
96 | # Extract binary
97 | echo -e "${CYAN}📦 Extracting...${NC}"
98 | tar xzf "$TMP_DIR/$BINARY_NAME" -C "$TMP_DIR"
99 |
100 | # Install binary
101 | INSTALL_DIR="/usr/local/bin"
102 | if [ ! -w "$INSTALL_DIR" ]; then
103 | INSTALL_DIR="$HOME/.local/bin"
104 | mkdir -p "$INSTALL_DIR"
105 | fi
106 |
107 | echo -e "${CYAN}📥 Installing to ${INSTALL_DIR}...${NC}"
108 | mv "$TMP_DIR/rustify" "$INSTALL_DIR/"
109 | chmod +x "$INSTALL_DIR/rustify"
110 |
111 | # Verify installation
112 | if ! command -v rustify >/dev/null 2>&1; then
113 | echo -e "${RED}❌ Installation failed${NC}"
114 | exit 1
115 | fi
116 |
117 | # Verify version
118 | INSTALLED_VERSION=$("$INSTALL_DIR/rustify" --version)
119 | echo -e "${GREEN}✅ Successfully installed ${INSTALLED_VERSION}${NC}"
120 | echo -e "${CYAN}🚀 Run 'rustify --help' to get started${NC}"
121 |
--------------------------------------------------------------------------------
/test_deploy.rs:
--------------------------------------------------------------------------------
1 | use std::{process::Command, io::{self, Write}, thread, time::Duration};
2 |
3 | fn main() -> io::Result<()> {
4 | println!("🚀 Testing Rustify Main Functionality");
5 |
6 | // Test main.rs components
7 | if let Err(e) = test_project_initialization() {
8 | eprintln!("Error during project initialization: {}", e);
9 | return Err(e);
10 | }
11 | if let Err(e) = test_deployment_flow() {
12 | eprintln!("Error during deployment flow: {}", e);
13 | return Err(e);
14 | }
15 | if let Err(e) = test_kubernetes_integration() {
16 | eprintln!("Error during Kubernetes integration: {}", e);
17 | return Err(e);
18 | }
19 |
20 | Ok(())
21 | }
22 |
23 | fn test_project_initialization() -> io::Result<()> {
24 | println!("\n📦 Testing Project Initialization...");
25 |
26 | // Test Next.js initialization
27 | println!("Testing Next.js setup...");
28 | let nextjs_config = r#"
29 | module.exports = {
30 | reactStrictMode: true,
31 | webpack: (config) => {
32 | config.optimization = {
33 | minimize: true,
34 | splitChunks: {
35 | chunks: 'all',
36 | },
37 | };
38 | return config;
39 | },
40 | };
41 | "#;
42 | std::fs::write("next.config.js", nextjs_config)?;
43 |
44 | // Test Docker configuration
45 | println!("Testing Docker setup...");
46 | let dockerfile = r#"
47 | FROM node:16-alpine
48 | WORKDIR /app
49 | COPY package*.json ./
50 | RUN npm install
51 | COPY . .
52 | RUN npm run build
53 | EXPOSE 3000
54 | CMD ["npm", "start"]
55 | "#;
56 | std::fs::write("Dockerfile", dockerfile)?;
57 |
58 | println!("✅ Project initialization tests passed");
59 | Ok(())
60 | }
61 |
62 | fn test_deployment_flow() -> io::Result<()> {
63 | println!("\n🚢 Testing Deployment Flow...");
64 |
65 | // Test metadata creation
66 | let metadata = r#"{
67 | "app_name": "test-app",
68 | "app_type": "nextjs",
69 | "port": "3000",
70 | "created_at": "2024-03-20T00:00:00Z",
71 | "kubernetes_enabled": true,
72 | "status": "pending"
73 | }"#;
74 | std::fs::write("app-metadata.json", metadata)?;
75 |
76 | // Test HAProxy configuration
77 | let haproxy_config = r#"
78 | backend apps
79 | balance first
80 | hash-type consistent
81 | stick-table type string len 32 size 100k expire 30m
82 | stick store-request req.cook(sessionid)
83 | option httpchk HEAD /health HTTP/1.1\r\nHost:\ localhost
84 | http-check expect status 200
85 | server-template app- 20 127.0.0.1:3000-3020 check resolvers docker init-addr none
86 | "#;
87 | std::fs::write("haproxy.cfg", haproxy_config)?;
88 |
89 | println!("✅ Deployment flow tests passed");
90 | Ok(())
91 | }
92 |
93 | fn test_kubernetes_integration() -> io::Result<()> {
94 | println!("\n☸️ Testing Kubernetes Integration...");
95 |
96 | // Create test deployment
97 | let deployment = r#"
98 | apiVersion: apps/v1
99 | kind: Deployment
100 | metadata:
101 | name: rustify-test
102 | namespace: default
103 | spec:
104 | replicas: 1
105 | selector:
106 | matchLabels:
107 | app: rustify-test
108 | template:
109 | metadata:
110 | labels:
111 | app: rustify-test
112 | spec:
113 | containers:
114 | - name: test-container
115 | image: nginx:latest
116 | ports:
117 | - containerPort: 80
118 | resources:
119 | requests:
120 | memory: "64Mi"
121 | cpu: "250m"
122 | limits:
123 | memory: "128Mi"
124 | cpu: "500m"
125 | readinessProbe:
126 | httpGet:
127 | path: /
128 | port: 80
129 | "#;
130 | std::fs::write("test-deployment.yaml", deployment)?;
131 |
132 | // Apply deployment
133 | Command::new("kubectl")
134 | .args(["apply", "-f", "test-deployment.yaml"])
135 | .output()?;
136 |
137 | // Wait for deployment
138 | println!("⏳ Waiting for deployment...");
139 | thread::sleep(Duration::from_secs(20));
140 |
141 | // Verify all components
142 | println!("\n📊 Verifying Components:");
143 |
144 | // 1. Check deployment status
145 | let deployment_status = Command::new("kubectl")
146 | .args(["get", "deployments", "rustify-test"])
147 | .output()?;
148 | println!("\nDeployment Status:");
149 | println!("{}", String::from_utf8_lossy(&deployment_status.stdout));
150 |
151 | // 2. Check HAProxy
152 | println!("\nHAProxy Status:");
153 | if let Ok(haproxy) = Command::new("kubectl")
154 | .args(["get", "pods", "-l", "app=haproxy"])
155 | .output() {
156 | println!("{}", String::from_utf8_lossy(&haproxy.stdout));
157 | }
158 |
159 | // 3. Check NGINX Ingress
160 | println!("\nNGINX Ingress Status:");
161 | if let Ok(nginx) = Command::new("kubectl")
162 | .args(["get", "pods", "-n", "ingress-nginx"])
163 | .output() {
164 | println!("{}", String::from_utf8_lossy(&nginx.stdout));
165 | }
166 |
167 | // 4. Check Metrics Server
168 | println!("\nMetrics Server Status:");
169 | if let Ok(metrics) = Command::new("kubectl")
170 | .args(["top", "pods"])
171 | .output() {
172 | println!("{}", String::from_utf8_lossy(&metrics.stdout));
173 | }
174 |
175 | // Cleanup
176 | println!("\n🧹 Cleaning up test resources...");
177 | Command::new("kubectl")
178 | .args(["delete", "deployment", "rustify-test"])
179 | .output()?;
180 |
181 | println!("✅ Kubernetes integration tests passed");
182 | Ok(())
183 | }
184 |
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | push:
5 | tags:
6 | - 'v*'
7 |
8 | env:
9 | CARGO_TERM_COLOR: always
10 |
11 | jobs:
12 | build:
13 | runs-on: ${{ matrix.os }}
14 | permissions: write-all
15 | strategy:
16 | fail-fast: false
17 | matrix:
18 | include:
19 | # Linux x86_64
20 | - os: ubuntu-latest
21 | target: x86_64-unknown-linux-gnu
22 | binary_name: rustify-linux-amd64
23 | cross: false
24 |
25 | # Linux ARM64
26 | - os: ubuntu-latest
27 | target: aarch64-unknown-linux-gnu
28 | binary_name: rustify-linux-arm64
29 | cross: true
30 |
31 | # macOS x86_64
32 | - os: macos-latest
33 | target: x86_64-apple-darwin
34 | binary_name: rustify-darwin-amd64
35 | cross: false
36 |
37 | # macOS ARM64
38 | - os: macos-latest
39 | target: aarch64-apple-darwin
40 | binary_name: rustify-darwin-arm64
41 | cross: false
42 |
43 | # Windows x64
44 | - os: windows-latest
45 | target: x86_64-pc-windows-msvc
46 | binary_name: rustify-windows-amd64
47 | cross: false
48 | steps:
49 | - uses: actions/checkout@v4
50 |
51 | # Cache dependencies
52 | - name: Cache dependencies
53 | uses: actions/cache@v2
54 | with:
55 | path: |
56 | ~/.cargo/registry
57 | ~/.cargo/git
58 | target
59 | key: ${{ runner.os }}-${{ matrix.target }}-cargo-${{ hashFiles('**/Cargo.lock') }}
60 |
61 | # Install Rust
62 | - name: Install Rust toolchain
63 | uses: dtolnay/rust-toolchain@stable
64 | with:
65 | targets: ${{ matrix.target }}
66 |
67 | # Windows-specific setup
68 | - name: Setup Windows dependencies
69 | if: matrix.os == 'windows-latest'
70 | run: |
71 | vcpkg integrate install
72 | vcpkg install openssl:x64-windows-static
73 | echo "OPENSSL_DIR=$env:VCPKG_INSTALLATION_ROOT\installed\x64-windows-static" >> $env:GITHUB_ENV
74 | echo "OPENSSL_STATIC=1" >> $env:GITHUB_ENV
75 | echo "RUSTFLAGS=-Ctarget-feature=+crt-static" >> $env:GITHUB_ENV
76 | shell: pwsh
77 |
78 | # Ubuntu-specific setup
79 | - name: Setup Ubuntu dependencies
80 | if: matrix.os == 'ubuntu-latest'
81 | run: |
82 | sudo apt-get update
83 | sudo apt-get install -y pkg-config libssl-dev build-essential cmake musl-tools
84 |
85 | if [ "${{ matrix.cross }}" = "true" ]; then
86 | sudo apt-get install -y gcc-aarch64-linux-gnu g++-aarch64-linux-gnu libc6-dev-arm64-cross
87 |
88 | echo "CARGO_TARGET_AARCH64_UNKNOWN_LINUX_GNU_LINKER=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
89 | echo "CC_aarch64_unknown_linux_gnu=aarch64-linux-gnu-gcc" >> $GITHUB_ENV
90 | echo "CXX_aarch64_unknown_linux_gnu=aarch64-linux-gnu-g++" >> $GITHUB_ENV
91 | echo "PKG_CONFIG_SYSROOT_DIR=/usr/aarch64-linux-gnu" >> $GITHUB_ENV
92 | echo "PKG_CONFIG_PATH=/usr/lib/aarch64-linux-gnu/pkgconfig" >> $GITHUB_ENV
93 | echo "OPENSSL_DIR=/usr/aarch64-linux-gnu" >> $GITHUB_ENV
94 | echo "OPENSSL_INCLUDE_DIR=/usr/include" >> $GITHUB_ENV
95 | echo "OPENSSL_LIB_DIR=/usr/lib/aarch64-linux-gnu" >> $GITHUB_ENV
96 | fi
97 |
98 | # macOS-specific setup
99 | - name: Setup macOS dependencies
100 | if: matrix.os == 'macos-latest'
101 | run: |
102 | brew install openssl@3
103 | echo "OPENSSL_ROOT_DIR=$(brew --prefix openssl@3)" >> $GITHUB_ENV
104 | echo "OPENSSL_INCLUDE_DIR=$(brew --prefix openssl@3)/include" >> $GITHUB_ENV
105 | echo "OPENSSL_LIB_DIR=$(brew --prefix openssl@3)/lib" >> $GITHUB_ENV
106 |
107 | if [ "${{ matrix.target }}" = "aarch64-apple-darwin" ]; then
108 | echo "SDKROOT=$(xcrun -sdk macosx --show-sdk-path)" >> $GITHUB_ENV
109 | echo "MACOSX_DEPLOYMENT_TARGET=11.0" >> $GITHUB_ENV
110 | fi
111 |
112 | # Build binary
113 | - name: Build Release Binary
114 | if: ${{ !matrix.cross }}
115 | run: cargo build --release --target ${{ matrix.target }}
116 | env:
117 | RUSTFLAGS: "-C target-feature=+crt-static"
118 |
119 | # Build binary with cross
120 | - name: Build Release Binary (Cross)
121 | if: matrix.cross
122 | run: |
123 | cargo install cross --git https://github.com/cross-rs/cross
124 | cross build --release --target ${{ matrix.target }}
125 |
126 | # Package binaries
127 | - name: Package Binary (Windows)
128 | if: matrix.os == 'windows-latest'
129 | shell: pwsh
130 | run: |
131 | cd target/${{ matrix.target }}/release
132 | 7z a ../../../${{ matrix.binary_name }}.zip rustify.exe
133 | cd ../../../
134 | $hash = Get-FileHash ${{ matrix.binary_name }}.zip -Algorithm SHA256
135 | $hash.Hash > ${{ matrix.binary_name }}.zip.sha256
136 |
137 | - name: Package Binary (Unix)
138 | if: matrix.os != 'windows-latest'
139 | run: |
140 | cd target/${{ matrix.target }}/release
141 | tar czf ../../../${{ matrix.binary_name }}.tar.gz rustify
142 | cd ../../../
143 | if [ "${{ runner.os }}" = "macOS" ]; then
144 | shasum -a 256 ${{ matrix.binary_name }}.tar.gz > ${{ matrix.binary_name }}.tar.gz.sha256
145 | else
146 | sha256sum ${{ matrix.binary_name }}.tar.gz > ${{ matrix.binary_name }}.tar.gz.sha256
147 | fi
148 |
149 | # Upload to release
150 | - name: Upload Release Assets
151 | uses: softprops/action-gh-release@v1
152 | with:
153 | files: |
154 | ${{ matrix.binary_name }}.*
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # # 🚀 Rustify CLI - Comprehensive User Guide
2 |
3 | ## Table of Contents
4 | - [Installation](#installation)
5 | - [Getting Started](#getting-started)
6 | - [Framework Support](#framework-support)
7 | - [Deployment Guide](#deployment-guide)
8 | - [Production Features](#production-features)
9 | - [Auto-scaling Guide](#auto-scaling-guide)
10 | - [Troubleshooting](#troubleshooting)
11 |
12 | ## Installation
13 |
14 | ### macOS
15 | ```bash
16 | # Using curl (recommended)
17 | curl -fsSL https://raw.githubusercontent.com/duggal1/rustify/main/install.sh | bash
18 | # Verify installation
19 | rustify --version
20 | ```
21 |
22 | ### Linux
23 | ```bash
24 | # Using curl
25 | curl -fsSL https://raw.githubusercontent.com/duggal1/rustify/main/install.sh | bash
26 | ```
27 |
28 | ### Windows
29 | ```powershell
30 | # Run PowerShell as Administrator
31 | iwr -useb https://raw.githubusercontent.com/duggal1/rustify/main/install.ps1 | iex
32 | ```
33 |
34 | ## Getting Started
35 |
36 | 1. **Initialize a New Project**
37 | ```bash
38 | # Create a new project with default framework (Bun)
39 | rustify init
40 | # Create a project with specific framework
41 | rustify init --type react
42 | ```
43 |
44 | 2. **Basic Deployment**
45 | ```bash
46 | # Development deployment
47 | rustify deploy
48 | # Production deployment
49 | rustify deploy --prod
50 | ```
51 |
52 | ## Framework Support
53 |
54 | ### React Projects
55 | ```bash
56 | # Initialize
57 | rustify init --type react
58 | # Deploy with optimizations
59 | rustify deploy --prod
60 | ```
61 | Features:
62 | - Webpack optimization
63 | - Code splitting
64 | - Tree shaking
65 | - Bundle analysis
66 |
67 | ### Vue Projects
68 | ```bash
69 | # Initialize
70 | rustify init --type vue
71 | # Deploy with modern mode
72 | rustify deploy --prod
73 | ```
74 | Features:
75 | - Modern mode building
76 | - Auto compression
77 | - Asset optimization
78 |
79 | ### MERN Stack
80 | ```bash
81 | # Initialize
82 | rustify init --type mern
83 | # Deploy full stack
84 | rustify deploy --prod
85 | ```
86 | Features:
87 | - Full-stack optimization
88 | - MongoDB configuration
89 | - Express server setup
90 | - React optimization
91 |
92 | ### Other Supported Frameworks
93 | ```bash
94 | # Svelte
95 | rustify init --type svelte
96 | # Angular
97 | rustify init --type angular
98 | # Astro
99 | rustify init --type astro
100 | # Remix
101 | rustify init --type remix
102 | ```
103 |
104 | ## Deployment Guide
105 |
106 | ### Development Deployment
107 | ```bash
108 | # Basic deployment
109 | rustify deploy
110 | # Custom port
111 | rustify deploy --port 3000
112 | # With cleanup
113 | rustify deploy --cleanup
114 | ```
115 |
116 | ### Production Deployment
117 | ```bash
118 | # Full production setup
119 | rustify deploy --prod
120 | # Production with custom port
121 | rustify deploy --prod --port 3000
122 | # Production with auto-scaling
123 | rustify deploy --prod --rpl
124 | ```
125 |
126 | ### Advanced Deployment Options
127 | ```bash
128 | # Full production deployment with all features
129 | rustify deploy --prod --rpl --port 3000 --cleanup
130 | ```
131 |
132 | ## Production Features
133 |
134 | 1. **Docker Integration**
135 | - Automatic Docker setup
136 | - Optimized Dockerfile generation
137 | - Multi-stage builds
138 | - Layer caching
139 |
140 | 2. **Kubernetes Setup**
141 | ```bash
142 | # Deploy to Kubernetes
143 | rustify deploy --prod
144 | ```
145 | Features:
146 | - Automatic namespace creation
147 | - Resource management
148 | - Health checks
149 | - Load balancing
150 |
151 | 3. **Monitoring**
152 | - CPU usage tracking
153 | - Memory monitoring
154 | - Request tracking
155 | - Error rate monitoring
156 |
157 | ## Auto-scaling Guide
158 |
159 | ### Enable Auto-scaling
160 | ```bash
161 | # Enable auto-scaling in production
162 | rustify deploy --prod --rpl
163 | ```
164 |
165 | ### Auto-scaling Features
166 | - CPU-based scaling (70% threshold)
167 | - Memory-based scaling (80% threshold)
168 | - Automatic replica management
169 | - Scale up to 10 pods
170 | - Intelligent scaling policies
171 |
172 | ### Scaling Configuration
173 | ```yaml
174 | # Default scaling configuration
175 | minReplicas: 1
176 | maxReplicas: 10
177 | metrics:
178 | cpu: 70%
179 | memory: 80%
180 | ```
181 |
182 | ## Troubleshooting
183 |
184 | ### Common Issues
185 |
186 | 1. **Docker Issues**
187 | ```bash
188 | # If Docker isn't running
189 | Error: Docker daemon not responding
190 | Solution: Start Docker Desktop manually
191 | ```
192 |
193 | 2. **Port Conflicts**
194 | ```bash
195 | # If default port is in use
196 | rustify deploy --port 3001
197 | ```
198 |
199 | 3. **Deployment Failures**
200 | ```bash
201 | # Clean up and retry
202 | rustify deploy --cleanup
203 | ```
204 |
205 | ### Best Practices
206 |
207 | - **Development**
208 | ```bash
209 | # Use development mode for testing
210 | rustify deploy
211 | ```
212 | - **Production**
213 | ```bash
214 | # Always use production mode with cleanup
215 | rustify deploy --prod --cleanup
216 | ```
217 | - **High Traffic Apps**
218 | ```bash
219 | # Enable auto-scaling for production
220 | rustify deploy --prod --rpl
221 | ```
222 |
223 | ### Performance Tips
224 |
225 | - **Resource Optimization**
226 | - Use `--prod` flag for production optimizations
227 | - Enable auto-scaling for high-traffic periods
228 | - Use `--cleanup` flag for fresh deployments
229 | - **Monitoring**
230 | - Check logs regularly
231 | - Monitor resource usage
232 | - Track scaling events
233 | - **Maintenance**
234 | ```bash
235 | # Regular cleanup
236 | rustify deploy --cleanup
237 |
238 | # Update deployments
239 | rustify deploy --prod --rpl --cleanup
240 | ```
241 |
242 | ### Environment Variables
243 |
244 | ```bash
245 | # Production environment
246 | NODE_ENV=production
247 | PORT=3000
248 | # Development environment
249 | NODE_ENV=development
250 | PORT=8000
251 | ```
252 |
253 | ### Security Best Practices
254 |
255 | - **Production Deployments**
256 | - Always use `--prod` flag
257 | - Enable security features
258 | - Use proper namespaces
259 | - **Docker Security**
260 | - Non-root user
261 | - Limited permissions
262 | - Secure defaults
263 | - **Kubernetes Security**
264 | - Network policies
265 | - Resource limits
266 | - Security contexts
267 |
268 | ### CI/CD Integration
269 |
270 | The CLI automatically generates GitHub Actions workflows:
271 |
272 | ```yaml
273 | name: CI/CD Pipeline
274 | on:
275 | push:
276 | branches: [main, develop]
277 | Features:
278 | - Automated testing
279 | - Docker image building
280 | - Kubernetes deployment
281 | - Security scanning
282 | ```
283 |
--------------------------------------------------------------------------------
/src/infrastructure/mod.rs:
--------------------------------------------------------------------------------
1 | use std::{io, process::Command};
2 | use tokio::runtime::Runtime;
3 | use kafka::client::{KafkaClient, RequiredAcks};
4 | use cassandra::cluster::{Cluster, TlsContext};
5 | use serde::{Deserialize, Serialize};
6 |
7 | #[derive(Debug, Serialize, Deserialize)]
8 | pub struct InfrastructureConfig {
9 | kafka_enabled: bool,
10 | database_separation: bool,
11 | global_lb_enabled: bool,
12 | multi_region: bool,
13 | chaos_engineering: bool,
14 | circuit_breakers: bool,
15 | }
16 |
17 | pub struct InfrastructureManager {
18 | config: InfrastructureConfig,
19 | kafka_client: Option,
20 | cassandra_cluster: Option,
21 | lb_manager: Option,
22 | chaos_manager: Option,
23 | }
24 |
25 | impl InfrastructureManager {
26 | pub fn new(config: InfrastructureConfig) -> io::Result {
27 | let kafka_client = if config.kafka_enabled {
28 | Some(KafkaClient::new(vec!["localhost:9092".to_owned()])?)
29 | } else {
30 | None
31 | };
32 |
33 | Ok(InfrastructureManager {
34 | config,
35 | kafka_client,
36 | cassandra_cluster: None,
37 | lb_manager: Some(LoadBalancerManager::new()?),
38 | chaos_manager: Some(ChaosManager::new()?),
39 | })
40 | }
41 |
42 | pub async fn setup_event_driven_architecture(&self) -> io::Result<()> {
43 | if let Some(kafka) = &self.kafka_client {
44 | println!("🔄 Setting up Event-Driven Architecture with Kafka...");
45 |
46 | // Create essential topics
47 | kafka.create_topic("app-events", 3, 2, None)?;
48 | kafka.create_topic("system-events", 3, 2, None)?;
49 | kafka.create_topic("audit-events", 3, 2, None)?;
50 |
51 | // Configure producers
52 | let producer_config = ProducerConfig {
53 | acks: RequiredAcks::All,
54 | retries: 3,
55 | batch_size: 16384,
56 | linger_ms: 1,
57 | compression: true,
58 | };
59 | kafka.configure_producer(producer_config)?;
60 |
61 | // Configure consumers
62 | let consumer_config = ConsumerConfig {
63 | group_id: "app-consumer-group",
64 | auto_offset_reset: "earliest",
65 | enable_auto_commit: true,
66 | max_poll_records: 500,
67 | };
68 | kafka.configure_consumer(consumer_config)?;
69 |
70 | println!("✅ Kafka configured successfully");
71 | }
72 | Ok(())
73 | }
74 |
75 | pub async fn setup_database_separation(&self) -> io::Result<()> {
76 | println!("💾 Setting up Database Read/Write Separation...");
77 |
78 | // Configure CockroachDB cluster
79 | let db_config = DatabaseConfig {
80 | write_nodes: vec!["write-1:26257", "write-2:26257"],
81 | read_nodes: vec!["read-1:26257", "read-2:26257", "read-3:26257"],
82 | replication_factor: 3,
83 | consistency_level: "CONSISTENCY_LEVEL_STRICT_SERIALIZABLE",
84 | };
85 |
86 | // Setup write node
87 | Command::new("cockroach")
88 | .args(["start", "--insecure", "--store=node1", "--listen-addr=localhost:26257"])
89 | .spawn()?;
90 |
91 | // Setup read nodes
92 | for i in 1..=3 {
93 | Command::new("cockroach")
94 | .args([
95 | "start",
96 | "--insecure",
97 | &format!("--store=node{}", i+1),
98 | &format!("--listen-addr=localhost:{}", 26257 + i),
99 | "--join=localhost:26257",
100 | ])
101 | .spawn()?;
102 | }
103 |
104 | println!("✅ Database separation configured successfully");
105 | Ok(())
106 | }
107 |
108 | pub async fn setup_global_load_balancing(&self) -> io::Result<()> {
109 | if let Some(lb) = &self.lb_manager {
110 | println!("🌐 Setting up Global Load Balancing...");
111 |
112 | // Configure global load balancing with HAProxy
113 | let lb_config = r#"
114 | global
115 | maxconn 50000
116 | ssl-default-bind-ciphers TLS13-AES-256-GCM-SHA384:TLS13-AES-128-GCM-SHA256
117 | ssl-default-bind-options no-sslv3 no-tlsv10 no-tlsv11 no-tls-tickets
118 |
119 | defaults
120 | mode http
121 | timeout connect 5s
122 | timeout client 50s
123 | timeout server 50s
124 | option httplog
125 | option dontlognull
126 | option http-server-close
127 | option forwardfor except 127.0.0.0/8
128 | option redispatch
129 |
130 | frontend ft_web
131 | bind *:80
132 | bind *:443 ssl crt /etc/ssl/certs/haproxy.pem
133 |
134 | # Advanced ACLs for routing
135 | acl is_websocket hdr(Upgrade) -i WebSocket
136 | acl is_api path_beg /api
137 | acl is_static path_beg /static /images /css /js
138 |
139 | # Rate limiting
140 | stick-table type ip size 100k expire 30s store http_req_rate(10s)
141 | http-request track-sc0 src
142 | http-request deny deny_status 429 if { sc_http_req_rate(0) gt 100 }
143 |
144 | # Route to appropriate backends
145 | use_backend bk_websocket if is_websocket
146 | use_backend bk_api if is_api
147 | use_backend bk_static if is_static
148 | default_backend bk_web
149 |
150 | backend bk_web
151 | balance roundrobin
152 | option httpchk GET /health HTTP/1.1\r\nHost:\ localhost
153 | server web1 10.0.0.1:8080 check
154 | server web2 10.0.0.2:8080 check
155 | server web3 10.0.0.3:8080 check backup
156 |
157 | backend bk_api
158 | balance leastconn
159 | option httpchk GET /api/health HTTP/1.1\r\nHost:\ localhost
160 | server api1 10.0.1.1:8081 check maxconn 3000
161 | server api2 10.0.1.2:8081 check maxconn 3000
162 |
163 | backend bk_static
164 | balance first
165 | option httpchk GET /static/health HTTP/1.1\r\nHost:\ localhost
166 | server static1 10.0.2.1:8082 check
167 | server static2 10.0.2.2:8082 check
168 | "#;
169 |
170 | lb.apply_config(lb_config)?;
171 | println!("✅ Global load balancing configured successfully");
172 | }
173 | Ok(())
174 | }
175 |
176 | pub async fn setup_multi_region(&self) -> io::Result<()> {
177 | println!("🌍 Setting up Multi-Region Deployment...");
178 |
179 | // Configure regions
180 | let regions = vec![
181 | Region {
182 | name: "us-east",
183 | primary: true,
184 | endpoints: vec!["us-east-1", "us-east-2"],
185 | },
186 | Region {
187 | name: "eu-west",
188 | primary: false,
189 | endpoints: vec!["eu-west-1", "eu-west-2"],
190 | },
191 | Region {
192 | name: "ap-south",
193 | primary: false,
194 | endpoints: vec!["ap-south-1"],
195 | },
196 | ];
197 |
198 | for region in regions {
199 | // Setup Kubernetes cluster in each region
200 | Command::new("kubectl")
201 | .args([
202 | "config",
203 | "use-context",
204 | &format!("cluster-{}", region.name),
205 | ])
206 | .output()?;
207 |
208 | // Apply regional configurations
209 | let regional_config = format!(
210 | r#"
211 | apiVersion: v1
212 | kind: ConfigMap
213 | metadata:
214 | name: regional-config
215 | namespace: default
216 | data:
217 | REGION: {}
218 | PRIMARY: {}
219 | ENDPOINTS: {}
220 | "#,
221 | region.name,
222 | region.primary,
223 | region.endpoints.join(",")
224 | );
225 |
226 | fs::write("regional-config.yaml", regional_config)?;
227 | Command::new("kubectl")
228 | .args(["apply", "-f", "regional-config.yaml"])
229 | .output()?;
230 | }
231 |
232 | println!("✅ Multi-region deployment configured successfully");
233 | Ok(())
234 | }
235 |
236 | pub async fn setup_chaos_engineering(&self) -> io::Result<()> {
237 | if let Some(chaos) = &self.chaos_manager {
238 | println!("🔥 Setting up Chaos Engineering...");
239 |
240 | // Configure chaos experiments
241 | let experiments = vec![
242 | ChaosExperiment {
243 | name: "pod-failure",
244 | target: "deployment/app",
245 | duration: "5m",
246 | interval: "24h",
247 | },
248 | ChaosExperiment {
249 | name: "network-latency",
250 | target: "namespace/default",
251 | duration: "10m",
252 | interval: "12h",
253 | },
254 | ChaosExperiment {
255 | name: "disk-failure",
256 | target: "statefulset/database",
257 | duration: "3m",
258 | interval: "48h",
259 | },
260 | ];
261 |
262 | for exp in experiments {
263 | chaos.create_experiment(exp)?;
264 | }
265 |
266 | // Setup monitoring for experiments
267 | chaos.setup_monitoring()?;
268 |
269 | println!("✅ Chaos engineering configured successfully");
270 | }
271 | Ok(())
272 | }
273 |
274 | pub fn setup_circuit_breakers(&self) -> io::Result<()> {
275 | println!("🔌 Setting up Circuit Breakers...");
276 |
277 | // Configure circuit breakers for different services
278 | let circuit_breakers = r#"
279 | global
280 | circuit_breaker
281 | service database
282 | error_threshold 50
283 | success_threshold 5
284 | reset_timeout 60s
285 | end
286 | service api
287 | error_threshold 30
288 | success_threshold 3
289 | reset_timeout 30s
290 | end
291 | service cache
292 | error_threshold 20
293 | success_threshold 2
294 | reset_timeout 15s
295 | end
296 | end
297 | "#;
298 |
299 | fs::write("circuit-breakers.conf", circuit_breakers)?;
300 |
301 | // Apply circuit breaker configuration
302 | Command::new("kubectl")
303 | .args(["apply", "-f", "circuit-breakers.conf"])
304 | .output()?;
305 |
306 | println!("✅ Circuit breakers configured successfully");
307 | Ok(())
308 | }
309 | }
--------------------------------------------------------------------------------
/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 = "addr2line"
7 | version = "0.24.2"
8 | source = "registry+https://github.com/rust-lang/crates.io-index"
9 | checksum = "dfbe277e56a376000877090da837660b4427aad530e3028d44e0bffe4f89a1c1"
10 | dependencies = [
11 | "gimli",
12 | ]
13 |
14 | [[package]]
15 | name = "adler2"
16 | version = "2.0.0"
17 | source = "registry+https://github.com/rust-lang/crates.io-index"
18 | checksum = "512761e0bb2578dd7380c6baaa0f4ce03e84f95e960231d1dec8bf4d7d6e2627"
19 |
20 | [[package]]
21 | name = "ahash"
22 | version = "0.8.11"
23 | source = "registry+https://github.com/rust-lang/crates.io-index"
24 | checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011"
25 | dependencies = [
26 | "cfg-if",
27 | "getrandom",
28 | "once_cell",
29 | "version_check",
30 | "zerocopy",
31 | ]
32 |
33 | [[package]]
34 | name = "android-tzdata"
35 | version = "0.1.1"
36 | source = "registry+https://github.com/rust-lang/crates.io-index"
37 | checksum = "e999941b234f3131b00bc13c22d06e8c5ff726d1b6318ac7eb276997bbb4fef0"
38 |
39 | [[package]]
40 | name = "android_system_properties"
41 | version = "0.1.5"
42 | source = "registry+https://github.com/rust-lang/crates.io-index"
43 | checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
44 | dependencies = [
45 | "libc",
46 | ]
47 |
48 | [[package]]
49 | name = "async-trait"
50 | version = "0.1.83"
51 | source = "registry+https://github.com/rust-lang/crates.io-index"
52 | checksum = "721cae7de5c34fbb2acd27e21e6d2cf7b886dce0c27388d46c4e6c47ea4318dd"
53 | dependencies = [
54 | "proc-macro2",
55 | "quote",
56 | "syn 2.0.87",
57 | ]
58 |
59 | [[package]]
60 | name = "atty"
61 | version = "0.2.14"
62 | source = "registry+https://github.com/rust-lang/crates.io-index"
63 | checksum = "d9b39be18770d11421cdb1b9947a45dd3f37e93092cbf377614828a319d5fee8"
64 | dependencies = [
65 | "hermit-abi 0.1.19",
66 | "libc",
67 | "winapi",
68 | ]
69 |
70 | [[package]]
71 | name = "autocfg"
72 | version = "1.4.0"
73 | source = "registry+https://github.com/rust-lang/crates.io-index"
74 | checksum = "ace50bade8e6234aa140d9a2f552bbee1db4d353f69b8217bc503490fc1a9f26"
75 |
76 | [[package]]
77 | name = "backoff"
78 | version = "0.4.0"
79 | source = "registry+https://github.com/rust-lang/crates.io-index"
80 | checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1"
81 | dependencies = [
82 | "getrandom",
83 | "instant",
84 | "rand",
85 | ]
86 |
87 | [[package]]
88 | name = "backtrace"
89 | version = "0.3.74"
90 | source = "registry+https://github.com/rust-lang/crates.io-index"
91 | checksum = "8d82cb332cdfaed17ae235a638438ac4d4839913cc2af585c3c6746e8f8bee1a"
92 | dependencies = [
93 | "addr2line",
94 | "cfg-if",
95 | "libc",
96 | "miniz_oxide",
97 | "object",
98 | "rustc-demangle",
99 | "windows-targets 0.52.6",
100 | ]
101 |
102 | [[package]]
103 | name = "base64"
104 | version = "0.13.1"
105 | source = "registry+https://github.com/rust-lang/crates.io-index"
106 | checksum = "9e1b586273c5702936fe7b7d6896644d8be71e6314cfe09d3167c95f712589e8"
107 |
108 | [[package]]
109 | name = "base64"
110 | version = "0.20.0"
111 | source = "registry+https://github.com/rust-lang/crates.io-index"
112 | checksum = "0ea22880d78093b0cbe17c89f64a7d457941e65759157ec6cb31a31d652b05e5"
113 |
114 | [[package]]
115 | name = "base64"
116 | version = "0.21.7"
117 | source = "registry+https://github.com/rust-lang/crates.io-index"
118 | checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
119 |
120 | [[package]]
121 | name = "bitflags"
122 | version = "1.3.2"
123 | source = "registry+https://github.com/rust-lang/crates.io-index"
124 | checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
125 |
126 | [[package]]
127 | name = "bitflags"
128 | version = "2.6.0"
129 | source = "registry+https://github.com/rust-lang/crates.io-index"
130 | checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de"
131 |
132 | [[package]]
133 | name = "bumpalo"
134 | version = "3.16.0"
135 | source = "registry+https://github.com/rust-lang/crates.io-index"
136 | checksum = "79296716171880943b8470b5f8d03aa55eb2e645a4874bdbb28adb49162e012c"
137 |
138 | [[package]]
139 | name = "byteorder"
140 | version = "1.5.0"
141 | source = "registry+https://github.com/rust-lang/crates.io-index"
142 | checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b"
143 |
144 | [[package]]
145 | name = "bytes"
146 | version = "1.8.0"
147 | source = "registry+https://github.com/rust-lang/crates.io-index"
148 | checksum = "9ac0150caa2ae65ca5bd83f25c7de183dea78d4d366469f148435e2acfbad0da"
149 |
150 | [[package]]
151 | name = "cc"
152 | version = "1.2.0"
153 | source = "registry+https://github.com/rust-lang/crates.io-index"
154 | checksum = "1aeb932158bd710538c73702db6945cb68a8fb08c519e6e12706b94263b36db8"
155 | dependencies = [
156 | "shlex",
157 | ]
158 |
159 | [[package]]
160 | name = "cfg-if"
161 | version = "1.0.0"
162 | source = "registry+https://github.com/rust-lang/crates.io-index"
163 | checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
164 |
165 | [[package]]
166 | name = "chrono"
167 | version = "0.4.38"
168 | source = "registry+https://github.com/rust-lang/crates.io-index"
169 | checksum = "a21f936df1771bf62b77f047b726c4625ff2e8aa607c01ec06e5a05bd8463401"
170 | dependencies = [
171 | "android-tzdata",
172 | "iana-time-zone",
173 | "js-sys",
174 | "num-traits",
175 | "serde",
176 | "wasm-bindgen",
177 | "windows-targets 0.52.6",
178 | ]
179 |
180 | [[package]]
181 | name = "clap"
182 | version = "3.2.25"
183 | source = "registry+https://github.com/rust-lang/crates.io-index"
184 | checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
185 | dependencies = [
186 | "atty",
187 | "bitflags 1.3.2",
188 | "clap_lex",
189 | "indexmap 1.9.3",
190 | "strsim",
191 | "termcolor",
192 | "textwrap",
193 | ]
194 |
195 | [[package]]
196 | name = "clap_lex"
197 | version = "0.2.4"
198 | source = "registry+https://github.com/rust-lang/crates.io-index"
199 | checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
200 | dependencies = [
201 | "os_str_bytes",
202 | ]
203 |
204 | [[package]]
205 | name = "colored"
206 | version = "2.1.0"
207 | source = "registry+https://github.com/rust-lang/crates.io-index"
208 | checksum = "cbf2150cce219b664a8a70df7a1f933836724b503f8a413af9365b4dcc4d90b8"
209 | dependencies = [
210 | "lazy_static",
211 | "windows-sys 0.48.0",
212 | ]
213 |
214 | [[package]]
215 | name = "core-foundation-sys"
216 | version = "0.8.7"
217 | source = "registry+https://github.com/rust-lang/crates.io-index"
218 | checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b"
219 |
220 | [[package]]
221 | name = "darling"
222 | version = "0.14.4"
223 | source = "registry+https://github.com/rust-lang/crates.io-index"
224 | checksum = "7b750cb3417fd1b327431a470f388520309479ab0bf5e323505daf0290cd3850"
225 | dependencies = [
226 | "darling_core",
227 | "darling_macro",
228 | ]
229 |
230 | [[package]]
231 | name = "darling_core"
232 | version = "0.14.4"
233 | source = "registry+https://github.com/rust-lang/crates.io-index"
234 | checksum = "109c1ca6e6b7f82cc233a97004ea8ed7ca123a9af07a8230878fcfda9b158bf0"
235 | dependencies = [
236 | "fnv",
237 | "ident_case",
238 | "proc-macro2",
239 | "quote",
240 | "strsim",
241 | "syn 1.0.109",
242 | ]
243 |
244 | [[package]]
245 | name = "darling_macro"
246 | version = "0.14.4"
247 | source = "registry+https://github.com/rust-lang/crates.io-index"
248 | checksum = "a4aab4dbc9f7611d8b55048a3a16d2d010c2c8334e46304b40ac1cc14bf3b48e"
249 | dependencies = [
250 | "darling_core",
251 | "quote",
252 | "syn 1.0.109",
253 | ]
254 |
255 | [[package]]
256 | name = "dashmap"
257 | version = "5.5.3"
258 | source = "registry+https://github.com/rust-lang/crates.io-index"
259 | checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856"
260 | dependencies = [
261 | "cfg-if",
262 | "hashbrown 0.14.5",
263 | "lock_api",
264 | "once_cell",
265 | "parking_lot_core",
266 | ]
267 |
268 | [[package]]
269 | name = "derivative"
270 | version = "2.2.0"
271 | source = "registry+https://github.com/rust-lang/crates.io-index"
272 | checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
273 | dependencies = [
274 | "proc-macro2",
275 | "quote",
276 | "syn 1.0.109",
277 | ]
278 |
279 | [[package]]
280 | name = "dirs-next"
281 | version = "2.0.0"
282 | source = "registry+https://github.com/rust-lang/crates.io-index"
283 | checksum = "b98cf8ebf19c3d1b223e151f99a4f9f0690dca41414773390fc824184ac833e1"
284 | dependencies = [
285 | "cfg-if",
286 | "dirs-sys-next",
287 | ]
288 |
289 | [[package]]
290 | name = "dirs-sys-next"
291 | version = "0.1.2"
292 | source = "registry+https://github.com/rust-lang/crates.io-index"
293 | checksum = "4ebda144c4fe02d1f7ea1a7d9641b6fc6b580adcfa024ae48797ecdeb6825b4d"
294 | dependencies = [
295 | "libc",
296 | "redox_users",
297 | "winapi",
298 | ]
299 |
300 | [[package]]
301 | name = "displaydoc"
302 | version = "0.2.5"
303 | source = "registry+https://github.com/rust-lang/crates.io-index"
304 | checksum = "97369cbbc041bc366949bc74d34658d6cda5621039731c6310521892a3a20ae0"
305 | dependencies = [
306 | "proc-macro2",
307 | "quote",
308 | "syn 2.0.87",
309 | ]
310 |
311 | [[package]]
312 | name = "dyn-clone"
313 | version = "1.0.17"
314 | source = "registry+https://github.com/rust-lang/crates.io-index"
315 | checksum = "0d6ef0072f8a535281e4876be788938b528e9a1d43900b82c2569af7da799125"
316 |
317 | [[package]]
318 | name = "either"
319 | version = "1.13.0"
320 | source = "registry+https://github.com/rust-lang/crates.io-index"
321 | checksum = "60b1af1c220855b6ceac025d3f6ecdd2b7c4894bfe9cd9bda4fbb4bc7c0d4cf0"
322 |
323 | [[package]]
324 | name = "equivalent"
325 | version = "1.0.1"
326 | source = "registry+https://github.com/rust-lang/crates.io-index"
327 | checksum = "5443807d6dff69373d433ab9ef5378ad8df50ca6298caf15de6e52e24aaf54d5"
328 |
329 | [[package]]
330 | name = "fnv"
331 | version = "1.0.7"
332 | source = "registry+https://github.com/rust-lang/crates.io-index"
333 | checksum = "3f9eec918d3f24069decb9af1554cad7c880e2da24a9afd88aca000531ab82c1"
334 |
335 | [[package]]
336 | name = "foreign-types"
337 | version = "0.3.2"
338 | source = "registry+https://github.com/rust-lang/crates.io-index"
339 | checksum = "f6f339eb8adc052cd2ca78910fda869aefa38d22d5cb648e6485e4d3fc06f3b1"
340 | dependencies = [
341 | "foreign-types-shared",
342 | ]
343 |
344 | [[package]]
345 | name = "foreign-types-shared"
346 | version = "0.1.1"
347 | source = "registry+https://github.com/rust-lang/crates.io-index"
348 | checksum = "00b0228411908ca8685dba7fc2cdd70ec9990a6e753e89b6ac91a84c40fbaf4b"
349 |
350 | [[package]]
351 | name = "form_urlencoded"
352 | version = "1.2.1"
353 | source = "registry+https://github.com/rust-lang/crates.io-index"
354 | checksum = "e13624c2627564efccf4934284bdd98cbaa14e79b0b5a141218e507b3a823456"
355 | dependencies = [
356 | "percent-encoding",
357 | ]
358 |
359 | [[package]]
360 | name = "futures"
361 | version = "0.3.31"
362 | source = "registry+https://github.com/rust-lang/crates.io-index"
363 | checksum = "65bc07b1a8bc7c85c5f2e110c476c7389b4554ba72af57d8445ea63a576b0876"
364 | dependencies = [
365 | "futures-channel",
366 | "futures-core",
367 | "futures-executor",
368 | "futures-io",
369 | "futures-sink",
370 | "futures-task",
371 | "futures-util",
372 | ]
373 |
374 | [[package]]
375 | name = "futures-channel"
376 | version = "0.3.31"
377 | source = "registry+https://github.com/rust-lang/crates.io-index"
378 | checksum = "2dff15bf788c671c1934e366d07e30c1814a8ef514e1af724a602e8a2fbe1b10"
379 | dependencies = [
380 | "futures-core",
381 | "futures-sink",
382 | ]
383 |
384 | [[package]]
385 | name = "futures-core"
386 | version = "0.3.31"
387 | source = "registry+https://github.com/rust-lang/crates.io-index"
388 | checksum = "05f29059c0c2090612e8d742178b0580d2dc940c837851ad723096f87af6663e"
389 |
390 | [[package]]
391 | name = "futures-executor"
392 | version = "0.3.31"
393 | source = "registry+https://github.com/rust-lang/crates.io-index"
394 | checksum = "1e28d1d997f585e54aebc3f97d39e72338912123a67330d723fdbb564d646c9f"
395 | dependencies = [
396 | "futures-core",
397 | "futures-task",
398 | "futures-util",
399 | ]
400 |
401 | [[package]]
402 | name = "futures-io"
403 | version = "0.3.31"
404 | source = "registry+https://github.com/rust-lang/crates.io-index"
405 | checksum = "9e5c1b78ca4aae1ac06c48a526a655760685149f0d465d21f37abfe57ce075c6"
406 |
407 | [[package]]
408 | name = "futures-macro"
409 | version = "0.3.31"
410 | source = "registry+https://github.com/rust-lang/crates.io-index"
411 | checksum = "162ee34ebcb7c64a8abebc059ce0fee27c2262618d7b60ed8faf72fef13c3650"
412 | dependencies = [
413 | "proc-macro2",
414 | "quote",
415 | "syn 2.0.87",
416 | ]
417 |
418 | [[package]]
419 | name = "futures-sink"
420 | version = "0.3.31"
421 | source = "registry+https://github.com/rust-lang/crates.io-index"
422 | checksum = "e575fab7d1e0dcb8d0c7bcf9a63ee213816ab51902e6d244a95819acacf1d4f7"
423 |
424 | [[package]]
425 | name = "futures-task"
426 | version = "0.3.31"
427 | source = "registry+https://github.com/rust-lang/crates.io-index"
428 | checksum = "f90f7dce0722e95104fcb095585910c0977252f286e354b5e3bd38902cd99988"
429 |
430 | [[package]]
431 | name = "futures-util"
432 | version = "0.3.31"
433 | source = "registry+https://github.com/rust-lang/crates.io-index"
434 | checksum = "9fa08315bb612088cc391249efdc3bc77536f16c91f6cf495e6fbe85b20a4a81"
435 | dependencies = [
436 | "futures-channel",
437 | "futures-core",
438 | "futures-io",
439 | "futures-macro",
440 | "futures-sink",
441 | "futures-task",
442 | "memchr",
443 | "pin-project-lite",
444 | "pin-utils",
445 | "slab",
446 | ]
447 |
448 | [[package]]
449 | name = "getrandom"
450 | version = "0.2.15"
451 | source = "registry+https://github.com/rust-lang/crates.io-index"
452 | checksum = "c4567c8db10ae91089c99af84c68c38da3ec2f087c3f82960bcdbf3656b6f4d7"
453 | dependencies = [
454 | "cfg-if",
455 | "libc",
456 | "wasi",
457 | ]
458 |
459 | [[package]]
460 | name = "gimli"
461 | version = "0.31.1"
462 | source = "registry+https://github.com/rust-lang/crates.io-index"
463 | checksum = "07e28edb80900c19c28f1072f2e8aeca7fa06b23cd4169cefe1af5aa3260783f"
464 |
465 | [[package]]
466 | name = "hashbrown"
467 | version = "0.12.3"
468 | source = "registry+https://github.com/rust-lang/crates.io-index"
469 | checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
470 |
471 | [[package]]
472 | name = "hashbrown"
473 | version = "0.14.5"
474 | source = "registry+https://github.com/rust-lang/crates.io-index"
475 | checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1"
476 |
477 | [[package]]
478 | name = "hashbrown"
479 | version = "0.15.1"
480 | source = "registry+https://github.com/rust-lang/crates.io-index"
481 | checksum = "3a9bfc1af68b1726ea47d3d5109de126281def866b33970e10fbab11b5dafab3"
482 |
483 | [[package]]
484 | name = "hermit-abi"
485 | version = "0.1.19"
486 | source = "registry+https://github.com/rust-lang/crates.io-index"
487 | checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
488 | dependencies = [
489 | "libc",
490 | ]
491 |
492 | [[package]]
493 | name = "hermit-abi"
494 | version = "0.3.9"
495 | source = "registry+https://github.com/rust-lang/crates.io-index"
496 | checksum = "d231dfb89cfffdbc30e7fc41579ed6066ad03abda9e567ccafae602b97ec5024"
497 |
498 | [[package]]
499 | name = "http"
500 | version = "0.2.12"
501 | source = "registry+https://github.com/rust-lang/crates.io-index"
502 | checksum = "601cbb57e577e2f5ef5be8e7b83f0f63994f25aa94d673e54a92d5c516d101f1"
503 | dependencies = [
504 | "bytes",
505 | "fnv",
506 | "itoa",
507 | ]
508 |
509 | [[package]]
510 | name = "http-body"
511 | version = "0.4.6"
512 | source = "registry+https://github.com/rust-lang/crates.io-index"
513 | checksum = "7ceab25649e9960c0311ea418d17bee82c0dcec1bd053b5f9a66e265a693bed2"
514 | dependencies = [
515 | "bytes",
516 | "http",
517 | "pin-project-lite",
518 | ]
519 |
520 | [[package]]
521 | name = "http-range-header"
522 | version = "0.3.1"
523 | source = "registry+https://github.com/rust-lang/crates.io-index"
524 | checksum = "add0ab9360ddbd88cfeb3bd9574a1d85cfdfa14db10b3e21d3700dbc4328758f"
525 |
526 | [[package]]
527 | name = "httparse"
528 | version = "1.9.5"
529 | source = "registry+https://github.com/rust-lang/crates.io-index"
530 | checksum = "7d71d3574edd2771538b901e6549113b4006ece66150fb69c0fb6d9a2adae946"
531 |
532 | [[package]]
533 | name = "httpdate"
534 | version = "1.0.3"
535 | source = "registry+https://github.com/rust-lang/crates.io-index"
536 | checksum = "df3b46402a9d5adb4c86a0cf463f42e19994e3ee891101b1841f30a545cb49a9"
537 |
538 | [[package]]
539 | name = "hyper"
540 | version = "0.14.31"
541 | source = "registry+https://github.com/rust-lang/crates.io-index"
542 | checksum = "8c08302e8fa335b151b788c775ff56e7a03ae64ff85c548ee820fecb70356e85"
543 | dependencies = [
544 | "bytes",
545 | "futures-channel",
546 | "futures-core",
547 | "futures-util",
548 | "http",
549 | "http-body",
550 | "httparse",
551 | "httpdate",
552 | "itoa",
553 | "pin-project-lite",
554 | "socket2",
555 | "tokio",
556 | "tower-service",
557 | "tracing",
558 | "want",
559 | ]
560 |
561 | [[package]]
562 | name = "hyper-openssl"
563 | version = "0.9.2"
564 | source = "registry+https://github.com/rust-lang/crates.io-index"
565 | checksum = "d6ee5d7a8f718585d1c3c61dfde28ef5b0bb14734b4db13f5ada856cdc6c612b"
566 | dependencies = [
567 | "http",
568 | "hyper",
569 | "linked_hash_set",
570 | "once_cell",
571 | "openssl",
572 | "openssl-sys",
573 | "parking_lot",
574 | "tokio",
575 | "tokio-openssl",
576 | "tower-layer",
577 | ]
578 |
579 | [[package]]
580 | name = "hyper-timeout"
581 | version = "0.4.1"
582 | source = "registry+https://github.com/rust-lang/crates.io-index"
583 | checksum = "bbb958482e8c7be4bc3cf272a766a2b0bf1a6755e7a6ae777f017a31d11b13b1"
584 | dependencies = [
585 | "hyper",
586 | "pin-project-lite",
587 | "tokio",
588 | "tokio-io-timeout",
589 | ]
590 |
591 | [[package]]
592 | name = "iana-time-zone"
593 | version = "0.1.61"
594 | source = "registry+https://github.com/rust-lang/crates.io-index"
595 | checksum = "235e081f3925a06703c2d0117ea8b91f042756fd6e7a6e5d901e8ca1a996b220"
596 | dependencies = [
597 | "android_system_properties",
598 | "core-foundation-sys",
599 | "iana-time-zone-haiku",
600 | "js-sys",
601 | "wasm-bindgen",
602 | "windows-core",
603 | ]
604 |
605 | [[package]]
606 | name = "iana-time-zone-haiku"
607 | version = "0.1.2"
608 | source = "registry+https://github.com/rust-lang/crates.io-index"
609 | checksum = "f31827a206f56af32e590ba56d5d2d085f558508192593743f16b2306495269f"
610 | dependencies = [
611 | "cc",
612 | ]
613 |
614 | [[package]]
615 | name = "icu_collections"
616 | version = "1.5.0"
617 | source = "registry+https://github.com/rust-lang/crates.io-index"
618 | checksum = "db2fa452206ebee18c4b5c2274dbf1de17008e874b4dc4f0aea9d01ca79e4526"
619 | dependencies = [
620 | "displaydoc",
621 | "yoke",
622 | "zerofrom",
623 | "zerovec",
624 | ]
625 |
626 | [[package]]
627 | name = "icu_locid"
628 | version = "1.5.0"
629 | source = "registry+https://github.com/rust-lang/crates.io-index"
630 | checksum = "13acbb8371917fc971be86fc8057c41a64b521c184808a698c02acc242dbf637"
631 | dependencies = [
632 | "displaydoc",
633 | "litemap",
634 | "tinystr",
635 | "writeable",
636 | "zerovec",
637 | ]
638 |
639 | [[package]]
640 | name = "icu_locid_transform"
641 | version = "1.5.0"
642 | source = "registry+https://github.com/rust-lang/crates.io-index"
643 | checksum = "01d11ac35de8e40fdeda00d9e1e9d92525f3f9d887cdd7aa81d727596788b54e"
644 | dependencies = [
645 | "displaydoc",
646 | "icu_locid",
647 | "icu_locid_transform_data",
648 | "icu_provider",
649 | "tinystr",
650 | "zerovec",
651 | ]
652 |
653 | [[package]]
654 | name = "icu_locid_transform_data"
655 | version = "1.5.0"
656 | source = "registry+https://github.com/rust-lang/crates.io-index"
657 | checksum = "fdc8ff3388f852bede6b579ad4e978ab004f139284d7b28715f773507b946f6e"
658 |
659 | [[package]]
660 | name = "icu_normalizer"
661 | version = "1.5.0"
662 | source = "registry+https://github.com/rust-lang/crates.io-index"
663 | checksum = "19ce3e0da2ec68599d193c93d088142efd7f9c5d6fc9b803774855747dc6a84f"
664 | dependencies = [
665 | "displaydoc",
666 | "icu_collections",
667 | "icu_normalizer_data",
668 | "icu_properties",
669 | "icu_provider",
670 | "smallvec",
671 | "utf16_iter",
672 | "utf8_iter",
673 | "write16",
674 | "zerovec",
675 | ]
676 |
677 | [[package]]
678 | name = "icu_normalizer_data"
679 | version = "1.5.0"
680 | source = "registry+https://github.com/rust-lang/crates.io-index"
681 | checksum = "f8cafbf7aa791e9b22bec55a167906f9e1215fd475cd22adfcf660e03e989516"
682 |
683 | [[package]]
684 | name = "icu_properties"
685 | version = "1.5.1"
686 | source = "registry+https://github.com/rust-lang/crates.io-index"
687 | checksum = "93d6020766cfc6302c15dbbc9c8778c37e62c14427cb7f6e601d849e092aeef5"
688 | dependencies = [
689 | "displaydoc",
690 | "icu_collections",
691 | "icu_locid_transform",
692 | "icu_properties_data",
693 | "icu_provider",
694 | "tinystr",
695 | "zerovec",
696 | ]
697 |
698 | [[package]]
699 | name = "icu_properties_data"
700 | version = "1.5.0"
701 | source = "registry+https://github.com/rust-lang/crates.io-index"
702 | checksum = "67a8effbc3dd3e4ba1afa8ad918d5684b8868b3b26500753effea8d2eed19569"
703 |
704 | [[package]]
705 | name = "icu_provider"
706 | version = "1.5.0"
707 | source = "registry+https://github.com/rust-lang/crates.io-index"
708 | checksum = "6ed421c8a8ef78d3e2dbc98a973be2f3770cb42b606e3ab18d6237c4dfde68d9"
709 | dependencies = [
710 | "displaydoc",
711 | "icu_locid",
712 | "icu_provider_macros",
713 | "stable_deref_trait",
714 | "tinystr",
715 | "writeable",
716 | "yoke",
717 | "zerofrom",
718 | "zerovec",
719 | ]
720 |
721 | [[package]]
722 | name = "icu_provider_macros"
723 | version = "1.5.0"
724 | source = "registry+https://github.com/rust-lang/crates.io-index"
725 | checksum = "1ec89e9337638ecdc08744df490b221a7399bf8d164eb52a665454e60e075ad6"
726 | dependencies = [
727 | "proc-macro2",
728 | "quote",
729 | "syn 2.0.87",
730 | ]
731 |
732 | [[package]]
733 | name = "ident_case"
734 | version = "1.0.1"
735 | source = "registry+https://github.com/rust-lang/crates.io-index"
736 | checksum = "b9e0384b61958566e926dc50660321d12159025e767c18e043daf26b70104c39"
737 |
738 | [[package]]
739 | name = "idna"
740 | version = "1.0.3"
741 | source = "registry+https://github.com/rust-lang/crates.io-index"
742 | checksum = "686f825264d630750a544639377bae737628043f20d38bbc029e8f29ea968a7e"
743 | dependencies = [
744 | "idna_adapter",
745 | "smallvec",
746 | "utf8_iter",
747 | ]
748 |
749 | [[package]]
750 | name = "idna_adapter"
751 | version = "1.2.0"
752 | source = "registry+https://github.com/rust-lang/crates.io-index"
753 | checksum = "daca1df1c957320b2cf139ac61e7bd64fed304c5040df000a745aa1de3b4ef71"
754 | dependencies = [
755 | "icu_normalizer",
756 | "icu_properties",
757 | ]
758 |
759 | [[package]]
760 | name = "indexmap"
761 | version = "1.9.3"
762 | source = "registry+https://github.com/rust-lang/crates.io-index"
763 | checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
764 | dependencies = [
765 | "autocfg",
766 | "hashbrown 0.12.3",
767 | ]
768 |
769 | [[package]]
770 | name = "indexmap"
771 | version = "2.6.0"
772 | source = "registry+https://github.com/rust-lang/crates.io-index"
773 | checksum = "707907fe3c25f5424cce2cb7e1cbcafee6bdbe735ca90ef77c29e84591e5b9da"
774 | dependencies = [
775 | "equivalent",
776 | "hashbrown 0.15.1",
777 | ]
778 |
779 | [[package]]
780 | name = "instant"
781 | version = "0.1.13"
782 | source = "registry+https://github.com/rust-lang/crates.io-index"
783 | checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222"
784 | dependencies = [
785 | "cfg-if",
786 | ]
787 |
788 | [[package]]
789 | name = "itoa"
790 | version = "1.0.11"
791 | source = "registry+https://github.com/rust-lang/crates.io-index"
792 | checksum = "49f1f14873335454500d59611f1cf4a4b0f786f9ac11f4312a78e4cf2566695b"
793 |
794 | [[package]]
795 | name = "js-sys"
796 | version = "0.3.72"
797 | source = "registry+https://github.com/rust-lang/crates.io-index"
798 | checksum = "6a88f1bda2bd75b0452a14784937d796722fdebfe50df998aeb3f0b7603019a9"
799 | dependencies = [
800 | "wasm-bindgen",
801 | ]
802 |
803 | [[package]]
804 | name = "json-patch"
805 | version = "1.4.0"
806 | source = "registry+https://github.com/rust-lang/crates.io-index"
807 | checksum = "ec9ad60d674508f3ca8f380a928cfe7b096bc729c4e2dbfe3852bc45da3ab30b"
808 | dependencies = [
809 | "serde",
810 | "serde_json",
811 | "thiserror",
812 | ]
813 |
814 | [[package]]
815 | name = "jsonpath_lib"
816 | version = "0.3.0"
817 | source = "registry+https://github.com/rust-lang/crates.io-index"
818 | checksum = "eaa63191d68230cccb81c5aa23abd53ed64d83337cacbb25a7b8c7979523774f"
819 | dependencies = [
820 | "log",
821 | "serde",
822 | "serde_json",
823 | ]
824 |
825 | [[package]]
826 | name = "k8s-openapi"
827 | version = "0.18.0"
828 | source = "registry+https://github.com/rust-lang/crates.io-index"
829 | checksum = "cd990069640f9db34b3b0f7a1afc62a05ffaa3be9b66aa3c313f58346df7f788"
830 | dependencies = [
831 | "base64 0.21.7",
832 | "bytes",
833 | "chrono",
834 | "http",
835 | "percent-encoding",
836 | "serde",
837 | "serde-value",
838 | "serde_json",
839 | "url",
840 | ]
841 |
842 | [[package]]
843 | name = "kube"
844 | version = "0.82.2"
845 | source = "registry+https://github.com/rust-lang/crates.io-index"
846 | checksum = "dc7d3d52dd5c871991679102e80dfb192faaaa09fecdbccdd8c55af264ce7a8f"
847 | dependencies = [
848 | "k8s-openapi",
849 | "kube-client",
850 | "kube-core",
851 | "kube-derive",
852 | "kube-runtime",
853 | ]
854 |
855 | [[package]]
856 | name = "kube-client"
857 | version = "0.82.2"
858 | source = "registry+https://github.com/rust-lang/crates.io-index"
859 | checksum = "544339f1665488243f79080441cacb09c997746fd763342303e66eebb9d3ba13"
860 | dependencies = [
861 | "base64 0.20.0",
862 | "bytes",
863 | "chrono",
864 | "dirs-next",
865 | "either",
866 | "futures",
867 | "http",
868 | "http-body",
869 | "hyper",
870 | "hyper-openssl",
871 | "hyper-timeout",
872 | "jsonpath_lib",
873 | "k8s-openapi",
874 | "kube-core",
875 | "openssl",
876 | "pem",
877 | "pin-project",
878 | "secrecy",
879 | "serde",
880 | "serde_json",
881 | "serde_yaml",
882 | "thiserror",
883 | "tokio",
884 | "tokio-util",
885 | "tower",
886 | "tower-http",
887 | "tracing",
888 | ]
889 |
890 | [[package]]
891 | name = "kube-core"
892 | version = "0.82.2"
893 | source = "registry+https://github.com/rust-lang/crates.io-index"
894 | checksum = "25983d07f414dfffba08c5951fe110f649113416b1d8e22f7c89c750eb2555a7"
895 | dependencies = [
896 | "chrono",
897 | "form_urlencoded",
898 | "http",
899 | "json-patch",
900 | "k8s-openapi",
901 | "once_cell",
902 | "schemars",
903 | "serde",
904 | "serde_json",
905 | "thiserror",
906 | ]
907 |
908 | [[package]]
909 | name = "kube-derive"
910 | version = "0.82.2"
911 | source = "registry+https://github.com/rust-lang/crates.io-index"
912 | checksum = "5af652b642aca19ef5194de3506aa39f89d788d5326a570da68b13a02d6c5ba2"
913 | dependencies = [
914 | "darling",
915 | "proc-macro2",
916 | "quote",
917 | "serde_json",
918 | "syn 1.0.109",
919 | ]
920 |
921 | [[package]]
922 | name = "kube-runtime"
923 | version = "0.82.2"
924 | source = "registry+https://github.com/rust-lang/crates.io-index"
925 | checksum = "125331201e3073707ac79c294c89021faa76c84da3a566a3749a2a93d295c98a"
926 | dependencies = [
927 | "ahash",
928 | "async-trait",
929 | "backoff",
930 | "derivative",
931 | "futures",
932 | "json-patch",
933 | "k8s-openapi",
934 | "kube-client",
935 | "parking_lot",
936 | "pin-project",
937 | "serde",
938 | "serde_json",
939 | "smallvec",
940 | "thiserror",
941 | "tokio",
942 | "tokio-util",
943 | "tracing",
944 | ]
945 |
946 | [[package]]
947 | name = "lazy_static"
948 | version = "1.5.0"
949 | source = "registry+https://github.com/rust-lang/crates.io-index"
950 | checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe"
951 |
952 | [[package]]
953 | name = "libc"
954 | version = "0.2.162"
955 | source = "registry+https://github.com/rust-lang/crates.io-index"
956 | checksum = "18d287de67fe55fd7e1581fe933d965a5a9477b38e949cfa9f8574ef01506398"
957 |
958 | [[package]]
959 | name = "libredox"
960 | version = "0.1.3"
961 | source = "registry+https://github.com/rust-lang/crates.io-index"
962 | checksum = "c0ff37bd590ca25063e35af745c343cb7a0271906fb7b37e4813e8f79f00268d"
963 | dependencies = [
964 | "bitflags 2.6.0",
965 | "libc",
966 | ]
967 |
968 | [[package]]
969 | name = "linked-hash-map"
970 | version = "0.5.6"
971 | source = "registry+https://github.com/rust-lang/crates.io-index"
972 | checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
973 |
974 | [[package]]
975 | name = "linked_hash_set"
976 | version = "0.1.4"
977 | source = "registry+https://github.com/rust-lang/crates.io-index"
978 | checksum = "47186c6da4d81ca383c7c47c1bfc80f4b95f4720514d860a5407aaf4233f9588"
979 | dependencies = [
980 | "linked-hash-map",
981 | ]
982 |
983 | [[package]]
984 | name = "litemap"
985 | version = "0.7.3"
986 | source = "registry+https://github.com/rust-lang/crates.io-index"
987 | checksum = "643cb0b8d4fcc284004d5fd0d67ccf61dfffadb7f75e1e71bc420f4688a3a704"
988 |
989 | [[package]]
990 | name = "lock_api"
991 | version = "0.4.12"
992 | source = "registry+https://github.com/rust-lang/crates.io-index"
993 | checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17"
994 | dependencies = [
995 | "autocfg",
996 | "scopeguard",
997 | ]
998 |
999 | [[package]]
1000 | name = "log"
1001 | version = "0.4.22"
1002 | source = "registry+https://github.com/rust-lang/crates.io-index"
1003 | checksum = "a7a70ba024b9dc04c27ea2f0c0548feb474ec5c54bba33a7f72f873a39d07b24"
1004 |
1005 | [[package]]
1006 | name = "memchr"
1007 | version = "2.7.4"
1008 | source = "registry+https://github.com/rust-lang/crates.io-index"
1009 | checksum = "78ca9ab1a0babb1e7d5695e3530886289c18cf2f87ec19a575a0abdce112e3a3"
1010 |
1011 | [[package]]
1012 | name = "mime"
1013 | version = "0.3.17"
1014 | source = "registry+https://github.com/rust-lang/crates.io-index"
1015 | checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a"
1016 |
1017 | [[package]]
1018 | name = "miniz_oxide"
1019 | version = "0.8.0"
1020 | source = "registry+https://github.com/rust-lang/crates.io-index"
1021 | checksum = "e2d80299ef12ff69b16a84bb182e3b9df68b5a91574d3d4fa6e41b65deec4df1"
1022 | dependencies = [
1023 | "adler2",
1024 | ]
1025 |
1026 | [[package]]
1027 | name = "mio"
1028 | version = "1.0.2"
1029 | source = "registry+https://github.com/rust-lang/crates.io-index"
1030 | checksum = "80e04d1dcff3aae0704555fe5fee3bcfaf3d1fdf8a7e521d5b9d2b42acb52cec"
1031 | dependencies = [
1032 | "hermit-abi 0.3.9",
1033 | "libc",
1034 | "wasi",
1035 | "windows-sys 0.52.0",
1036 | ]
1037 |
1038 | [[package]]
1039 | name = "num-traits"
1040 | version = "0.2.19"
1041 | source = "registry+https://github.com/rust-lang/crates.io-index"
1042 | checksum = "071dfc062690e90b734c0b2273ce72ad0ffa95f0c74596bc250dcfd960262841"
1043 | dependencies = [
1044 | "autocfg",
1045 | ]
1046 |
1047 | [[package]]
1048 | name = "object"
1049 | version = "0.36.5"
1050 | source = "registry+https://github.com/rust-lang/crates.io-index"
1051 | checksum = "aedf0a2d09c573ed1d8d85b30c119153926a2b36dce0ab28322c09a117a4683e"
1052 | dependencies = [
1053 | "memchr",
1054 | ]
1055 |
1056 | [[package]]
1057 | name = "once_cell"
1058 | version = "1.20.2"
1059 | source = "registry+https://github.com/rust-lang/crates.io-index"
1060 | checksum = "1261fe7e33c73b354eab43b1273a57c8f967d0391e80353e51f764ac02cf6775"
1061 |
1062 | [[package]]
1063 | name = "openssl"
1064 | version = "0.10.68"
1065 | source = "registry+https://github.com/rust-lang/crates.io-index"
1066 | checksum = "6174bc48f102d208783c2c84bf931bb75927a617866870de8a4ea85597f871f5"
1067 | dependencies = [
1068 | "bitflags 2.6.0",
1069 | "cfg-if",
1070 | "foreign-types",
1071 | "libc",
1072 | "once_cell",
1073 | "openssl-macros",
1074 | "openssl-sys",
1075 | ]
1076 |
1077 | [[package]]
1078 | name = "openssl-macros"
1079 | version = "0.1.1"
1080 | source = "registry+https://github.com/rust-lang/crates.io-index"
1081 | checksum = "a948666b637a0f465e8564c73e89d4dde00d72d4d473cc972f390fc3dcee7d9c"
1082 | dependencies = [
1083 | "proc-macro2",
1084 | "quote",
1085 | "syn 2.0.87",
1086 | ]
1087 |
1088 | [[package]]
1089 | name = "openssl-src"
1090 | version = "300.4.0+3.4.0"
1091 | source = "registry+https://github.com/rust-lang/crates.io-index"
1092 | checksum = "a709e02f2b4aca747929cca5ed248880847c650233cf8b8cdc48f40aaf4898a6"
1093 | dependencies = [
1094 | "cc",
1095 | ]
1096 |
1097 | [[package]]
1098 | name = "openssl-sys"
1099 | version = "0.9.104"
1100 | source = "registry+https://github.com/rust-lang/crates.io-index"
1101 | checksum = "45abf306cbf99debc8195b66b7346498d7b10c210de50418b5ccd7ceba08c741"
1102 | dependencies = [
1103 | "cc",
1104 | "libc",
1105 | "openssl-src",
1106 | "pkg-config",
1107 | "vcpkg",
1108 | ]
1109 |
1110 | [[package]]
1111 | name = "ordered-float"
1112 | version = "2.10.1"
1113 | source = "registry+https://github.com/rust-lang/crates.io-index"
1114 | checksum = "68f19d67e5a2795c94e73e0bb1cc1a7edeb2e28efd39e2e1c9b7a40c1108b11c"
1115 | dependencies = [
1116 | "num-traits",
1117 | ]
1118 |
1119 | [[package]]
1120 | name = "os_str_bytes"
1121 | version = "6.6.1"
1122 | source = "registry+https://github.com/rust-lang/crates.io-index"
1123 | checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
1124 |
1125 | [[package]]
1126 | name = "parking_lot"
1127 | version = "0.12.3"
1128 | source = "registry+https://github.com/rust-lang/crates.io-index"
1129 | checksum = "f1bf18183cf54e8d6059647fc3063646a1801cf30896933ec2311622cc4b9a27"
1130 | dependencies = [
1131 | "lock_api",
1132 | "parking_lot_core",
1133 | ]
1134 |
1135 | [[package]]
1136 | name = "parking_lot_core"
1137 | version = "0.9.10"
1138 | source = "registry+https://github.com/rust-lang/crates.io-index"
1139 | checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8"
1140 | dependencies = [
1141 | "cfg-if",
1142 | "libc",
1143 | "redox_syscall",
1144 | "smallvec",
1145 | "windows-targets 0.52.6",
1146 | ]
1147 |
1148 | [[package]]
1149 | name = "pem"
1150 | version = "1.1.1"
1151 | source = "registry+https://github.com/rust-lang/crates.io-index"
1152 | checksum = "a8835c273a76a90455d7344889b0964598e3316e2a79ede8e36f16bdcf2228b8"
1153 | dependencies = [
1154 | "base64 0.13.1",
1155 | ]
1156 |
1157 | [[package]]
1158 | name = "percent-encoding"
1159 | version = "2.3.1"
1160 | source = "registry+https://github.com/rust-lang/crates.io-index"
1161 | checksum = "e3148f5046208a5d56bcfc03053e3ca6334e51da8dfb19b6cdc8b306fae3283e"
1162 |
1163 | [[package]]
1164 | name = "pin-project"
1165 | version = "1.1.7"
1166 | source = "registry+https://github.com/rust-lang/crates.io-index"
1167 | checksum = "be57f64e946e500c8ee36ef6331845d40a93055567ec57e8fae13efd33759b95"
1168 | dependencies = [
1169 | "pin-project-internal",
1170 | ]
1171 |
1172 | [[package]]
1173 | name = "pin-project-internal"
1174 | version = "1.1.7"
1175 | source = "registry+https://github.com/rust-lang/crates.io-index"
1176 | checksum = "3c0f5fad0874fc7abcd4d750e76917eaebbecaa2c20bde22e1dbeeba8beb758c"
1177 | dependencies = [
1178 | "proc-macro2",
1179 | "quote",
1180 | "syn 2.0.87",
1181 | ]
1182 |
1183 | [[package]]
1184 | name = "pin-project-lite"
1185 | version = "0.2.15"
1186 | source = "registry+https://github.com/rust-lang/crates.io-index"
1187 | checksum = "915a1e146535de9163f3987b8944ed8cf49a18bb0056bcebcdcece385cece4ff"
1188 |
1189 | [[package]]
1190 | name = "pin-utils"
1191 | version = "0.1.0"
1192 | source = "registry+https://github.com/rust-lang/crates.io-index"
1193 | checksum = "8b870d8c151b6f2fb93e84a13146138f05d02ed11c7e7c54f8826aaaf7c9f184"
1194 |
1195 | [[package]]
1196 | name = "pkg-config"
1197 | version = "0.3.31"
1198 | source = "registry+https://github.com/rust-lang/crates.io-index"
1199 | checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2"
1200 |
1201 | [[package]]
1202 | name = "ppv-lite86"
1203 | version = "0.2.20"
1204 | source = "registry+https://github.com/rust-lang/crates.io-index"
1205 | checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04"
1206 | dependencies = [
1207 | "zerocopy",
1208 | ]
1209 |
1210 | [[package]]
1211 | name = "proc-macro2"
1212 | version = "1.0.89"
1213 | source = "registry+https://github.com/rust-lang/crates.io-index"
1214 | checksum = "f139b0662de085916d1fb67d2b4169d1addddda1919e696f3252b740b629986e"
1215 | dependencies = [
1216 | "unicode-ident",
1217 | ]
1218 |
1219 | [[package]]
1220 | name = "quote"
1221 | version = "1.0.37"
1222 | source = "registry+https://github.com/rust-lang/crates.io-index"
1223 | checksum = "b5b9d34b8991d19d98081b46eacdd8eb58c6f2b201139f7c5f643cc155a633af"
1224 | dependencies = [
1225 | "proc-macro2",
1226 | ]
1227 |
1228 | [[package]]
1229 | name = "rand"
1230 | version = "0.8.5"
1231 | source = "registry+https://github.com/rust-lang/crates.io-index"
1232 | checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
1233 | dependencies = [
1234 | "libc",
1235 | "rand_chacha",
1236 | "rand_core",
1237 | ]
1238 |
1239 | [[package]]
1240 | name = "rand_chacha"
1241 | version = "0.3.1"
1242 | source = "registry+https://github.com/rust-lang/crates.io-index"
1243 | checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
1244 | dependencies = [
1245 | "ppv-lite86",
1246 | "rand_core",
1247 | ]
1248 |
1249 | [[package]]
1250 | name = "rand_core"
1251 | version = "0.6.4"
1252 | source = "registry+https://github.com/rust-lang/crates.io-index"
1253 | checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
1254 | dependencies = [
1255 | "getrandom",
1256 | ]
1257 |
1258 | [[package]]
1259 | name = "redox_syscall"
1260 | version = "0.5.7"
1261 | source = "registry+https://github.com/rust-lang/crates.io-index"
1262 | checksum = "9b6dfecf2c74bce2466cabf93f6664d6998a69eb21e39f4207930065b27b771f"
1263 | dependencies = [
1264 | "bitflags 2.6.0",
1265 | ]
1266 |
1267 | [[package]]
1268 | name = "redox_users"
1269 | version = "0.4.6"
1270 | source = "registry+https://github.com/rust-lang/crates.io-index"
1271 | checksum = "ba009ff324d1fc1b900bd1fdb31564febe58a8ccc8a6fdbb93b543d33b13ca43"
1272 | dependencies = [
1273 | "getrandom",
1274 | "libredox",
1275 | "thiserror",
1276 | ]
1277 |
1278 | [[package]]
1279 | name = "rustc-demangle"
1280 | version = "0.1.24"
1281 | source = "registry+https://github.com/rust-lang/crates.io-index"
1282 | checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f"
1283 |
1284 | [[package]]
1285 | name = "rustify"
1286 | version = "2.0.6"
1287 | dependencies = [
1288 | "async-trait",
1289 | "chrono",
1290 | "clap",
1291 | "colored",
1292 | "dashmap",
1293 | "futures",
1294 | "k8s-openapi",
1295 | "kube",
1296 | "openssl",
1297 | "openssl-sys",
1298 | "parking_lot",
1299 | "proc-macro2",
1300 | "quote",
1301 | "serde",
1302 | "serde_json",
1303 | "syn 2.0.87",
1304 | "tokio",
1305 | "walkdir",
1306 | "whoami",
1307 | ]
1308 |
1309 | [[package]]
1310 | name = "ryu"
1311 | version = "1.0.18"
1312 | source = "registry+https://github.com/rust-lang/crates.io-index"
1313 | checksum = "f3cb5ba0dc43242ce17de99c180e96db90b235b8a9fdc9543c96d2209116bd9f"
1314 |
1315 | [[package]]
1316 | name = "same-file"
1317 | version = "1.0.6"
1318 | source = "registry+https://github.com/rust-lang/crates.io-index"
1319 | checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502"
1320 | dependencies = [
1321 | "winapi-util",
1322 | ]
1323 |
1324 | [[package]]
1325 | name = "schemars"
1326 | version = "0.8.21"
1327 | source = "registry+https://github.com/rust-lang/crates.io-index"
1328 | checksum = "09c024468a378b7e36765cd36702b7a90cc3cba11654f6685c8f233408e89e92"
1329 | dependencies = [
1330 | "dyn-clone",
1331 | "schemars_derive",
1332 | "serde",
1333 | "serde_json",
1334 | ]
1335 |
1336 | [[package]]
1337 | name = "schemars_derive"
1338 | version = "0.8.21"
1339 | source = "registry+https://github.com/rust-lang/crates.io-index"
1340 | checksum = "b1eee588578aff73f856ab961cd2f79e36bc45d7ded33a7562adba4667aecc0e"
1341 | dependencies = [
1342 | "proc-macro2",
1343 | "quote",
1344 | "serde_derive_internals",
1345 | "syn 2.0.87",
1346 | ]
1347 |
1348 | [[package]]
1349 | name = "scopeguard"
1350 | version = "1.2.0"
1351 | source = "registry+https://github.com/rust-lang/crates.io-index"
1352 | checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
1353 |
1354 | [[package]]
1355 | name = "secrecy"
1356 | version = "0.8.0"
1357 | source = "registry+https://github.com/rust-lang/crates.io-index"
1358 | checksum = "9bd1c54ea06cfd2f6b63219704de0b9b4f72dcc2b8fdef820be6cd799780e91e"
1359 | dependencies = [
1360 | "serde",
1361 | "zeroize",
1362 | ]
1363 |
1364 | [[package]]
1365 | name = "serde"
1366 | version = "1.0.215"
1367 | source = "registry+https://github.com/rust-lang/crates.io-index"
1368 | checksum = "6513c1ad0b11a9376da888e3e0baa0077f1aed55c17f50e7b2397136129fb88f"
1369 | dependencies = [
1370 | "serde_derive",
1371 | ]
1372 |
1373 | [[package]]
1374 | name = "serde-value"
1375 | version = "0.7.0"
1376 | source = "registry+https://github.com/rust-lang/crates.io-index"
1377 | checksum = "f3a1a3341211875ef120e117ea7fd5228530ae7e7036a779fdc9117be6b3282c"
1378 | dependencies = [
1379 | "ordered-float",
1380 | "serde",
1381 | ]
1382 |
1383 | [[package]]
1384 | name = "serde_derive"
1385 | version = "1.0.215"
1386 | source = "registry+https://github.com/rust-lang/crates.io-index"
1387 | checksum = "ad1e866f866923f252f05c889987993144fb74e722403468a4ebd70c3cd756c0"
1388 | dependencies = [
1389 | "proc-macro2",
1390 | "quote",
1391 | "syn 2.0.87",
1392 | ]
1393 |
1394 | [[package]]
1395 | name = "serde_derive_internals"
1396 | version = "0.29.1"
1397 | source = "registry+https://github.com/rust-lang/crates.io-index"
1398 | checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
1399 | dependencies = [
1400 | "proc-macro2",
1401 | "quote",
1402 | "syn 2.0.87",
1403 | ]
1404 |
1405 | [[package]]
1406 | name = "serde_json"
1407 | version = "1.0.132"
1408 | source = "registry+https://github.com/rust-lang/crates.io-index"
1409 | checksum = "d726bfaff4b320266d395898905d0eba0345aae23b54aee3a737e260fd46db03"
1410 | dependencies = [
1411 | "indexmap 2.6.0",
1412 | "itoa",
1413 | "memchr",
1414 | "ryu",
1415 | "serde",
1416 | ]
1417 |
1418 | [[package]]
1419 | name = "serde_yaml"
1420 | version = "0.9.34+deprecated"
1421 | source = "registry+https://github.com/rust-lang/crates.io-index"
1422 | checksum = "6a8b1a1a2ebf674015cc02edccce75287f1a0130d394307b36743c2f5d504b47"
1423 | dependencies = [
1424 | "indexmap 2.6.0",
1425 | "itoa",
1426 | "ryu",
1427 | "serde",
1428 | "unsafe-libyaml",
1429 | ]
1430 |
1431 | [[package]]
1432 | name = "shlex"
1433 | version = "1.3.0"
1434 | source = "registry+https://github.com/rust-lang/crates.io-index"
1435 | checksum = "0fda2ff0d084019ba4d7c6f371c95d8fd75ce3524c3cb8fb653a3023f6323e64"
1436 |
1437 | [[package]]
1438 | name = "signal-hook-registry"
1439 | version = "1.4.2"
1440 | source = "registry+https://github.com/rust-lang/crates.io-index"
1441 | checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
1442 | dependencies = [
1443 | "libc",
1444 | ]
1445 |
1446 | [[package]]
1447 | name = "slab"
1448 | version = "0.4.9"
1449 | source = "registry+https://github.com/rust-lang/crates.io-index"
1450 | checksum = "8f92a496fb766b417c996b9c5e57daf2f7ad3b0bebe1ccfca4856390e3d3bb67"
1451 | dependencies = [
1452 | "autocfg",
1453 | ]
1454 |
1455 | [[package]]
1456 | name = "smallvec"
1457 | version = "1.13.2"
1458 | source = "registry+https://github.com/rust-lang/crates.io-index"
1459 | checksum = "3c5e1a9a646d36c3599cd173a41282daf47c44583ad367b8e6837255952e5c67"
1460 |
1461 | [[package]]
1462 | name = "socket2"
1463 | version = "0.5.7"
1464 | source = "registry+https://github.com/rust-lang/crates.io-index"
1465 | checksum = "ce305eb0b4296696835b71df73eb912e0f1ffd2556a501fcede6e0c50349191c"
1466 | dependencies = [
1467 | "libc",
1468 | "windows-sys 0.52.0",
1469 | ]
1470 |
1471 | [[package]]
1472 | name = "stable_deref_trait"
1473 | version = "1.2.0"
1474 | source = "registry+https://github.com/rust-lang/crates.io-index"
1475 | checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3"
1476 |
1477 | [[package]]
1478 | name = "strsim"
1479 | version = "0.10.0"
1480 | source = "registry+https://github.com/rust-lang/crates.io-index"
1481 | checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
1482 |
1483 | [[package]]
1484 | name = "syn"
1485 | version = "1.0.109"
1486 | source = "registry+https://github.com/rust-lang/crates.io-index"
1487 | checksum = "72b64191b275b66ffe2469e8af2c1cfe3bafa67b529ead792a6d0160888b4237"
1488 | dependencies = [
1489 | "proc-macro2",
1490 | "quote",
1491 | "unicode-ident",
1492 | ]
1493 |
1494 | [[package]]
1495 | name = "syn"
1496 | version = "2.0.87"
1497 | source = "registry+https://github.com/rust-lang/crates.io-index"
1498 | checksum = "25aa4ce346d03a6dcd68dd8b4010bcb74e54e62c90c573f394c46eae99aba32d"
1499 | dependencies = [
1500 | "proc-macro2",
1501 | "quote",
1502 | "unicode-ident",
1503 | ]
1504 |
1505 | [[package]]
1506 | name = "synstructure"
1507 | version = "0.13.1"
1508 | source = "registry+https://github.com/rust-lang/crates.io-index"
1509 | checksum = "c8af7666ab7b6390ab78131fb5b0fce11d6b7a6951602017c35fa82800708971"
1510 | dependencies = [
1511 | "proc-macro2",
1512 | "quote",
1513 | "syn 2.0.87",
1514 | ]
1515 |
1516 | [[package]]
1517 | name = "termcolor"
1518 | version = "1.4.1"
1519 | source = "registry+https://github.com/rust-lang/crates.io-index"
1520 | checksum = "06794f8f6c5c898b3275aebefa6b8a1cb24cd2c6c79397ab15774837a0bc5755"
1521 | dependencies = [
1522 | "winapi-util",
1523 | ]
1524 |
1525 | [[package]]
1526 | name = "textwrap"
1527 | version = "0.16.1"
1528 | source = "registry+https://github.com/rust-lang/crates.io-index"
1529 | checksum = "23d434d3f8967a09480fb04132ebe0a3e088c173e6d0ee7897abbdf4eab0f8b9"
1530 |
1531 | [[package]]
1532 | name = "thiserror"
1533 | version = "1.0.69"
1534 | source = "registry+https://github.com/rust-lang/crates.io-index"
1535 | checksum = "b6aaf5339b578ea85b50e080feb250a3e8ae8cfcdff9a461c9ec2904bc923f52"
1536 | dependencies = [
1537 | "thiserror-impl",
1538 | ]
1539 |
1540 | [[package]]
1541 | name = "thiserror-impl"
1542 | version = "1.0.69"
1543 | source = "registry+https://github.com/rust-lang/crates.io-index"
1544 | checksum = "4fee6c4efc90059e10f81e6d42c60a18f76588c3d74cb83a0b242a2b6c7504c1"
1545 | dependencies = [
1546 | "proc-macro2",
1547 | "quote",
1548 | "syn 2.0.87",
1549 | ]
1550 |
1551 | [[package]]
1552 | name = "tinystr"
1553 | version = "0.7.6"
1554 | source = "registry+https://github.com/rust-lang/crates.io-index"
1555 | checksum = "9117f5d4db391c1cf6927e7bea3db74b9a1c1add8f7eda9ffd5364f40f57b82f"
1556 | dependencies = [
1557 | "displaydoc",
1558 | "zerovec",
1559 | ]
1560 |
1561 | [[package]]
1562 | name = "tokio"
1563 | version = "1.41.1"
1564 | source = "registry+https://github.com/rust-lang/crates.io-index"
1565 | checksum = "22cfb5bee7a6a52939ca9224d6ac897bb669134078daa8735560897f69de4d33"
1566 | dependencies = [
1567 | "backtrace",
1568 | "bytes",
1569 | "libc",
1570 | "mio",
1571 | "parking_lot",
1572 | "pin-project-lite",
1573 | "signal-hook-registry",
1574 | "socket2",
1575 | "tokio-macros",
1576 | "windows-sys 0.52.0",
1577 | ]
1578 |
1579 | [[package]]
1580 | name = "tokio-io-timeout"
1581 | version = "1.2.0"
1582 | source = "registry+https://github.com/rust-lang/crates.io-index"
1583 | checksum = "30b74022ada614a1b4834de765f9bb43877f910cc8ce4be40e89042c9223a8bf"
1584 | dependencies = [
1585 | "pin-project-lite",
1586 | "tokio",
1587 | ]
1588 |
1589 | [[package]]
1590 | name = "tokio-macros"
1591 | version = "2.4.0"
1592 | source = "registry+https://github.com/rust-lang/crates.io-index"
1593 | checksum = "693d596312e88961bc67d7f1f97af8a70227d9f90c31bba5806eec004978d752"
1594 | dependencies = [
1595 | "proc-macro2",
1596 | "quote",
1597 | "syn 2.0.87",
1598 | ]
1599 |
1600 | [[package]]
1601 | name = "tokio-openssl"
1602 | version = "0.6.5"
1603 | source = "registry+https://github.com/rust-lang/crates.io-index"
1604 | checksum = "59df6849caa43bb7567f9a36f863c447d95a11d5903c9cc334ba32576a27eadd"
1605 | dependencies = [
1606 | "openssl",
1607 | "openssl-sys",
1608 | "tokio",
1609 | ]
1610 |
1611 | [[package]]
1612 | name = "tokio-util"
1613 | version = "0.7.12"
1614 | source = "registry+https://github.com/rust-lang/crates.io-index"
1615 | checksum = "61e7c3654c13bcd040d4a03abee2c75b1d14a37b423cf5a813ceae1cc903ec6a"
1616 | dependencies = [
1617 | "bytes",
1618 | "futures-core",
1619 | "futures-sink",
1620 | "pin-project-lite",
1621 | "slab",
1622 | "tokio",
1623 | ]
1624 |
1625 | [[package]]
1626 | name = "tower"
1627 | version = "0.4.13"
1628 | source = "registry+https://github.com/rust-lang/crates.io-index"
1629 | checksum = "b8fa9be0de6cf49e536ce1851f987bd21a43b771b09473c3549a6c853db37c1c"
1630 | dependencies = [
1631 | "futures-core",
1632 | "futures-util",
1633 | "pin-project",
1634 | "pin-project-lite",
1635 | "tokio",
1636 | "tokio-util",
1637 | "tower-layer",
1638 | "tower-service",
1639 | "tracing",
1640 | ]
1641 |
1642 | [[package]]
1643 | name = "tower-http"
1644 | version = "0.4.4"
1645 | source = "registry+https://github.com/rust-lang/crates.io-index"
1646 | checksum = "61c5bb1d698276a2443e5ecfabc1008bf15a36c12e6a7176e7bf089ea9131140"
1647 | dependencies = [
1648 | "base64 0.21.7",
1649 | "bitflags 2.6.0",
1650 | "bytes",
1651 | "futures-core",
1652 | "futures-util",
1653 | "http",
1654 | "http-body",
1655 | "http-range-header",
1656 | "mime",
1657 | "pin-project-lite",
1658 | "tower-layer",
1659 | "tower-service",
1660 | "tracing",
1661 | ]
1662 |
1663 | [[package]]
1664 | name = "tower-layer"
1665 | version = "0.3.3"
1666 | source = "registry+https://github.com/rust-lang/crates.io-index"
1667 | checksum = "121c2a6cda46980bb0fcd1647ffaf6cd3fc79a013de288782836f6df9c48780e"
1668 |
1669 | [[package]]
1670 | name = "tower-service"
1671 | version = "0.3.3"
1672 | source = "registry+https://github.com/rust-lang/crates.io-index"
1673 | checksum = "8df9b6e13f2d32c91b9bd719c00d1958837bc7dec474d94952798cc8e69eeec3"
1674 |
1675 | [[package]]
1676 | name = "tracing"
1677 | version = "0.1.40"
1678 | source = "registry+https://github.com/rust-lang/crates.io-index"
1679 | checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
1680 | dependencies = [
1681 | "log",
1682 | "pin-project-lite",
1683 | "tracing-attributes",
1684 | "tracing-core",
1685 | ]
1686 |
1687 | [[package]]
1688 | name = "tracing-attributes"
1689 | version = "0.1.27"
1690 | source = "registry+https://github.com/rust-lang/crates.io-index"
1691 | checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
1692 | dependencies = [
1693 | "proc-macro2",
1694 | "quote",
1695 | "syn 2.0.87",
1696 | ]
1697 |
1698 | [[package]]
1699 | name = "tracing-core"
1700 | version = "0.1.32"
1701 | source = "registry+https://github.com/rust-lang/crates.io-index"
1702 | checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
1703 | dependencies = [
1704 | "once_cell",
1705 | ]
1706 |
1707 | [[package]]
1708 | name = "try-lock"
1709 | version = "0.2.5"
1710 | source = "registry+https://github.com/rust-lang/crates.io-index"
1711 | checksum = "e421abadd41a4225275504ea4d6566923418b7f05506fbc9c0fe86ba7396114b"
1712 |
1713 | [[package]]
1714 | name = "unicode-ident"
1715 | version = "1.0.13"
1716 | source = "registry+https://github.com/rust-lang/crates.io-index"
1717 | checksum = "e91b56cd4cadaeb79bbf1a5645f6b4f8dc5bde8834ad5894a8db35fda9efa1fe"
1718 |
1719 | [[package]]
1720 | name = "unsafe-libyaml"
1721 | version = "0.2.11"
1722 | source = "registry+https://github.com/rust-lang/crates.io-index"
1723 | checksum = "673aac59facbab8a9007c7f6108d11f63b603f7cabff99fabf650fea5c32b861"
1724 |
1725 | [[package]]
1726 | name = "url"
1727 | version = "2.5.3"
1728 | source = "registry+https://github.com/rust-lang/crates.io-index"
1729 | checksum = "8d157f1b96d14500ffdc1f10ba712e780825526c03d9a49b4d0324b0d9113ada"
1730 | dependencies = [
1731 | "form_urlencoded",
1732 | "idna",
1733 | "percent-encoding",
1734 | ]
1735 |
1736 | [[package]]
1737 | name = "utf16_iter"
1738 | version = "1.0.5"
1739 | source = "registry+https://github.com/rust-lang/crates.io-index"
1740 | checksum = "c8232dd3cdaed5356e0f716d285e4b40b932ac434100fe9b7e0e8e935b9e6246"
1741 |
1742 | [[package]]
1743 | name = "utf8_iter"
1744 | version = "1.0.4"
1745 | source = "registry+https://github.com/rust-lang/crates.io-index"
1746 | checksum = "b6c140620e7ffbb22c2dee59cafe6084a59b5ffc27a8859a5f0d494b5d52b6be"
1747 |
1748 | [[package]]
1749 | name = "vcpkg"
1750 | version = "0.2.15"
1751 | source = "registry+https://github.com/rust-lang/crates.io-index"
1752 | checksum = "accd4ea62f7bb7a82fe23066fb0957d48ef677f6eeb8215f372f52e48bb32426"
1753 |
1754 | [[package]]
1755 | name = "version_check"
1756 | version = "0.9.5"
1757 | source = "registry+https://github.com/rust-lang/crates.io-index"
1758 | checksum = "0b928f33d975fc6ad9f86c8f283853ad26bdd5b10b7f1542aa2fa15e2289105a"
1759 |
1760 | [[package]]
1761 | name = "walkdir"
1762 | version = "2.5.0"
1763 | source = "registry+https://github.com/rust-lang/crates.io-index"
1764 | checksum = "29790946404f91d9c5d06f9874efddea1dc06c5efe94541a7d6863108e3a5e4b"
1765 | dependencies = [
1766 | "same-file",
1767 | "winapi-util",
1768 | ]
1769 |
1770 | [[package]]
1771 | name = "want"
1772 | version = "0.3.1"
1773 | source = "registry+https://github.com/rust-lang/crates.io-index"
1774 | checksum = "bfa7760aed19e106de2c7c0b581b509f2f25d3dacaf737cb82ac61bc6d760b0e"
1775 | dependencies = [
1776 | "try-lock",
1777 | ]
1778 |
1779 | [[package]]
1780 | name = "wasi"
1781 | version = "0.11.0+wasi-snapshot-preview1"
1782 | source = "registry+https://github.com/rust-lang/crates.io-index"
1783 | checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
1784 |
1785 | [[package]]
1786 | name = "wasite"
1787 | version = "0.1.0"
1788 | source = "registry+https://github.com/rust-lang/crates.io-index"
1789 | checksum = "b8dad83b4f25e74f184f64c43b150b91efe7647395b42289f38e50566d82855b"
1790 |
1791 | [[package]]
1792 | name = "wasm-bindgen"
1793 | version = "0.2.95"
1794 | source = "registry+https://github.com/rust-lang/crates.io-index"
1795 | checksum = "128d1e363af62632b8eb57219c8fd7877144af57558fb2ef0368d0087bddeb2e"
1796 | dependencies = [
1797 | "cfg-if",
1798 | "once_cell",
1799 | "wasm-bindgen-macro",
1800 | ]
1801 |
1802 | [[package]]
1803 | name = "wasm-bindgen-backend"
1804 | version = "0.2.95"
1805 | source = "registry+https://github.com/rust-lang/crates.io-index"
1806 | checksum = "cb6dd4d3ca0ddffd1dd1c9c04f94b868c37ff5fac97c30b97cff2d74fce3a358"
1807 | dependencies = [
1808 | "bumpalo",
1809 | "log",
1810 | "once_cell",
1811 | "proc-macro2",
1812 | "quote",
1813 | "syn 2.0.87",
1814 | "wasm-bindgen-shared",
1815 | ]
1816 |
1817 | [[package]]
1818 | name = "wasm-bindgen-macro"
1819 | version = "0.2.95"
1820 | source = "registry+https://github.com/rust-lang/crates.io-index"
1821 | checksum = "e79384be7f8f5a9dd5d7167216f022090cf1f9ec128e6e6a482a2cb5c5422c56"
1822 | dependencies = [
1823 | "quote",
1824 | "wasm-bindgen-macro-support",
1825 | ]
1826 |
1827 | [[package]]
1828 | name = "wasm-bindgen-macro-support"
1829 | version = "0.2.95"
1830 | source = "registry+https://github.com/rust-lang/crates.io-index"
1831 | checksum = "26c6ab57572f7a24a4985830b120de1594465e5d500f24afe89e16b4e833ef68"
1832 | dependencies = [
1833 | "proc-macro2",
1834 | "quote",
1835 | "syn 2.0.87",
1836 | "wasm-bindgen-backend",
1837 | "wasm-bindgen-shared",
1838 | ]
1839 |
1840 | [[package]]
1841 | name = "wasm-bindgen-shared"
1842 | version = "0.2.95"
1843 | source = "registry+https://github.com/rust-lang/crates.io-index"
1844 | checksum = "65fc09f10666a9f147042251e0dda9c18f166ff7de300607007e96bdebc1068d"
1845 |
1846 | [[package]]
1847 | name = "web-sys"
1848 | version = "0.3.72"
1849 | source = "registry+https://github.com/rust-lang/crates.io-index"
1850 | checksum = "f6488b90108c040df0fe62fa815cbdee25124641df01814dd7282749234c6112"
1851 | dependencies = [
1852 | "js-sys",
1853 | "wasm-bindgen",
1854 | ]
1855 |
1856 | [[package]]
1857 | name = "whoami"
1858 | version = "1.5.2"
1859 | source = "registry+https://github.com/rust-lang/crates.io-index"
1860 | checksum = "372d5b87f58ec45c384ba03563b03544dc5fadc3983e434b286913f5b4a9bb6d"
1861 | dependencies = [
1862 | "redox_syscall",
1863 | "wasite",
1864 | "web-sys",
1865 | ]
1866 |
1867 | [[package]]
1868 | name = "winapi"
1869 | version = "0.3.9"
1870 | source = "registry+https://github.com/rust-lang/crates.io-index"
1871 | checksum = "5c839a674fcd7a98952e593242ea400abe93992746761e38641405d28b00f419"
1872 | dependencies = [
1873 | "winapi-i686-pc-windows-gnu",
1874 | "winapi-x86_64-pc-windows-gnu",
1875 | ]
1876 |
1877 | [[package]]
1878 | name = "winapi-i686-pc-windows-gnu"
1879 | version = "0.4.0"
1880 | source = "registry+https://github.com/rust-lang/crates.io-index"
1881 | checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
1882 |
1883 | [[package]]
1884 | name = "winapi-util"
1885 | version = "0.1.9"
1886 | source = "registry+https://github.com/rust-lang/crates.io-index"
1887 | checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb"
1888 | dependencies = [
1889 | "windows-sys 0.59.0",
1890 | ]
1891 |
1892 | [[package]]
1893 | name = "winapi-x86_64-pc-windows-gnu"
1894 | version = "0.4.0"
1895 | source = "registry+https://github.com/rust-lang/crates.io-index"
1896 | checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
1897 |
1898 | [[package]]
1899 | name = "windows-core"
1900 | version = "0.52.0"
1901 | source = "registry+https://github.com/rust-lang/crates.io-index"
1902 | checksum = "33ab640c8d7e35bf8ba19b884ba838ceb4fba93a4e8c65a9059d08afcfc683d9"
1903 | dependencies = [
1904 | "windows-targets 0.52.6",
1905 | ]
1906 |
1907 | [[package]]
1908 | name = "windows-sys"
1909 | version = "0.48.0"
1910 | source = "registry+https://github.com/rust-lang/crates.io-index"
1911 | checksum = "677d2418bec65e3338edb076e806bc1ec15693c5d0104683f2efe857f61056a9"
1912 | dependencies = [
1913 | "windows-targets 0.48.5",
1914 | ]
1915 |
1916 | [[package]]
1917 | name = "windows-sys"
1918 | version = "0.52.0"
1919 | source = "registry+https://github.com/rust-lang/crates.io-index"
1920 | checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d"
1921 | dependencies = [
1922 | "windows-targets 0.52.6",
1923 | ]
1924 |
1925 | [[package]]
1926 | name = "windows-sys"
1927 | version = "0.59.0"
1928 | source = "registry+https://github.com/rust-lang/crates.io-index"
1929 | checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b"
1930 | dependencies = [
1931 | "windows-targets 0.52.6",
1932 | ]
1933 |
1934 | [[package]]
1935 | name = "windows-targets"
1936 | version = "0.48.5"
1937 | source = "registry+https://github.com/rust-lang/crates.io-index"
1938 | checksum = "9a2fa6e2155d7247be68c096456083145c183cbbbc2764150dda45a87197940c"
1939 | dependencies = [
1940 | "windows_aarch64_gnullvm 0.48.5",
1941 | "windows_aarch64_msvc 0.48.5",
1942 | "windows_i686_gnu 0.48.5",
1943 | "windows_i686_msvc 0.48.5",
1944 | "windows_x86_64_gnu 0.48.5",
1945 | "windows_x86_64_gnullvm 0.48.5",
1946 | "windows_x86_64_msvc 0.48.5",
1947 | ]
1948 |
1949 | [[package]]
1950 | name = "windows-targets"
1951 | version = "0.52.6"
1952 | source = "registry+https://github.com/rust-lang/crates.io-index"
1953 | checksum = "9b724f72796e036ab90c1021d4780d4d3d648aca59e491e6b98e725b84e99973"
1954 | dependencies = [
1955 | "windows_aarch64_gnullvm 0.52.6",
1956 | "windows_aarch64_msvc 0.52.6",
1957 | "windows_i686_gnu 0.52.6",
1958 | "windows_i686_gnullvm",
1959 | "windows_i686_msvc 0.52.6",
1960 | "windows_x86_64_gnu 0.52.6",
1961 | "windows_x86_64_gnullvm 0.52.6",
1962 | "windows_x86_64_msvc 0.52.6",
1963 | ]
1964 |
1965 | [[package]]
1966 | name = "windows_aarch64_gnullvm"
1967 | version = "0.48.5"
1968 | source = "registry+https://github.com/rust-lang/crates.io-index"
1969 | checksum = "2b38e32f0abccf9987a4e3079dfb67dcd799fb61361e53e2882c3cbaf0d905d8"
1970 |
1971 | [[package]]
1972 | name = "windows_aarch64_gnullvm"
1973 | version = "0.52.6"
1974 | source = "registry+https://github.com/rust-lang/crates.io-index"
1975 | checksum = "32a4622180e7a0ec044bb555404c800bc9fd9ec262ec147edd5989ccd0c02cd3"
1976 |
1977 | [[package]]
1978 | name = "windows_aarch64_msvc"
1979 | version = "0.48.5"
1980 | source = "registry+https://github.com/rust-lang/crates.io-index"
1981 | checksum = "dc35310971f3b2dbbf3f0690a219f40e2d9afcf64f9ab7cc1be722937c26b4bc"
1982 |
1983 | [[package]]
1984 | name = "windows_aarch64_msvc"
1985 | version = "0.52.6"
1986 | source = "registry+https://github.com/rust-lang/crates.io-index"
1987 | checksum = "09ec2a7bb152e2252b53fa7803150007879548bc709c039df7627cabbd05d469"
1988 |
1989 | [[package]]
1990 | name = "windows_i686_gnu"
1991 | version = "0.48.5"
1992 | source = "registry+https://github.com/rust-lang/crates.io-index"
1993 | checksum = "a75915e7def60c94dcef72200b9a8e58e5091744960da64ec734a6c6e9b3743e"
1994 |
1995 | [[package]]
1996 | name = "windows_i686_gnu"
1997 | version = "0.52.6"
1998 | source = "registry+https://github.com/rust-lang/crates.io-index"
1999 | checksum = "8e9b5ad5ab802e97eb8e295ac6720e509ee4c243f69d781394014ebfe8bbfa0b"
2000 |
2001 | [[package]]
2002 | name = "windows_i686_gnullvm"
2003 | version = "0.52.6"
2004 | source = "registry+https://github.com/rust-lang/crates.io-index"
2005 | checksum = "0eee52d38c090b3caa76c563b86c3a4bd71ef1a819287c19d586d7334ae8ed66"
2006 |
2007 | [[package]]
2008 | name = "windows_i686_msvc"
2009 | version = "0.48.5"
2010 | source = "registry+https://github.com/rust-lang/crates.io-index"
2011 | checksum = "8f55c233f70c4b27f66c523580f78f1004e8b5a8b659e05a4eb49d4166cca406"
2012 |
2013 | [[package]]
2014 | name = "windows_i686_msvc"
2015 | version = "0.52.6"
2016 | source = "registry+https://github.com/rust-lang/crates.io-index"
2017 | checksum = "240948bc05c5e7c6dabba28bf89d89ffce3e303022809e73deaefe4f6ec56c66"
2018 |
2019 | [[package]]
2020 | name = "windows_x86_64_gnu"
2021 | version = "0.48.5"
2022 | source = "registry+https://github.com/rust-lang/crates.io-index"
2023 | checksum = "53d40abd2583d23e4718fddf1ebec84dbff8381c07cae67ff7768bbf19c6718e"
2024 |
2025 | [[package]]
2026 | name = "windows_x86_64_gnu"
2027 | version = "0.52.6"
2028 | source = "registry+https://github.com/rust-lang/crates.io-index"
2029 | checksum = "147a5c80aabfbf0c7d901cb5895d1de30ef2907eb21fbbab29ca94c5b08b1a78"
2030 |
2031 | [[package]]
2032 | name = "windows_x86_64_gnullvm"
2033 | version = "0.48.5"
2034 | source = "registry+https://github.com/rust-lang/crates.io-index"
2035 | checksum = "0b7b52767868a23d5bab768e390dc5f5c55825b6d30b86c844ff2dc7414044cc"
2036 |
2037 | [[package]]
2038 | name = "windows_x86_64_gnullvm"
2039 | version = "0.52.6"
2040 | source = "registry+https://github.com/rust-lang/crates.io-index"
2041 | checksum = "24d5b23dc417412679681396f2b49f3de8c1473deb516bd34410872eff51ed0d"
2042 |
2043 | [[package]]
2044 | name = "windows_x86_64_msvc"
2045 | version = "0.48.5"
2046 | source = "registry+https://github.com/rust-lang/crates.io-index"
2047 | checksum = "ed94fce61571a4006852b7389a063ab983c02eb1bb37b47f8272ce92d06d9538"
2048 |
2049 | [[package]]
2050 | name = "windows_x86_64_msvc"
2051 | version = "0.52.6"
2052 | source = "registry+https://github.com/rust-lang/crates.io-index"
2053 | checksum = "589f6da84c646204747d1270a2a5661ea66ed1cced2631d546fdfb155959f9ec"
2054 |
2055 | [[package]]
2056 | name = "write16"
2057 | version = "1.0.0"
2058 | source = "registry+https://github.com/rust-lang/crates.io-index"
2059 | checksum = "d1890f4022759daae28ed4fe62859b1236caebfc61ede2f63ed4e695f3f6d936"
2060 |
2061 | [[package]]
2062 | name = "writeable"
2063 | version = "0.5.5"
2064 | source = "registry+https://github.com/rust-lang/crates.io-index"
2065 | checksum = "1e9df38ee2d2c3c5948ea468a8406ff0db0b29ae1ffde1bcf20ef305bcc95c51"
2066 |
2067 | [[package]]
2068 | name = "yoke"
2069 | version = "0.7.4"
2070 | source = "registry+https://github.com/rust-lang/crates.io-index"
2071 | checksum = "6c5b1314b079b0930c31e3af543d8ee1757b1951ae1e1565ec704403a7240ca5"
2072 | dependencies = [
2073 | "serde",
2074 | "stable_deref_trait",
2075 | "yoke-derive",
2076 | "zerofrom",
2077 | ]
2078 |
2079 | [[package]]
2080 | name = "yoke-derive"
2081 | version = "0.7.4"
2082 | source = "registry+https://github.com/rust-lang/crates.io-index"
2083 | checksum = "28cc31741b18cb6f1d5ff12f5b7523e3d6eb0852bbbad19d73905511d9849b95"
2084 | dependencies = [
2085 | "proc-macro2",
2086 | "quote",
2087 | "syn 2.0.87",
2088 | "synstructure",
2089 | ]
2090 |
2091 | [[package]]
2092 | name = "zerocopy"
2093 | version = "0.7.35"
2094 | source = "registry+https://github.com/rust-lang/crates.io-index"
2095 | checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0"
2096 | dependencies = [
2097 | "byteorder",
2098 | "zerocopy-derive",
2099 | ]
2100 |
2101 | [[package]]
2102 | name = "zerocopy-derive"
2103 | version = "0.7.35"
2104 | source = "registry+https://github.com/rust-lang/crates.io-index"
2105 | checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e"
2106 | dependencies = [
2107 | "proc-macro2",
2108 | "quote",
2109 | "syn 2.0.87",
2110 | ]
2111 |
2112 | [[package]]
2113 | name = "zerofrom"
2114 | version = "0.1.4"
2115 | source = "registry+https://github.com/rust-lang/crates.io-index"
2116 | checksum = "91ec111ce797d0e0784a1116d0ddcdbea84322cd79e5d5ad173daeba4f93ab55"
2117 | dependencies = [
2118 | "zerofrom-derive",
2119 | ]
2120 |
2121 | [[package]]
2122 | name = "zerofrom-derive"
2123 | version = "0.1.4"
2124 | source = "registry+https://github.com/rust-lang/crates.io-index"
2125 | checksum = "0ea7b4a3637ea8669cedf0f1fd5c286a17f3de97b8dd5a70a6c167a1730e63a5"
2126 | dependencies = [
2127 | "proc-macro2",
2128 | "quote",
2129 | "syn 2.0.87",
2130 | "synstructure",
2131 | ]
2132 |
2133 | [[package]]
2134 | name = "zeroize"
2135 | version = "1.8.1"
2136 | source = "registry+https://github.com/rust-lang/crates.io-index"
2137 | checksum = "ced3678a2879b30306d323f4542626697a464a97c0a07c9aebf7ebca65cd4dde"
2138 |
2139 | [[package]]
2140 | name = "zerovec"
2141 | version = "0.10.4"
2142 | source = "registry+https://github.com/rust-lang/crates.io-index"
2143 | checksum = "aa2b893d79df23bfb12d5461018d408ea19dfafe76c2c7ef6d4eba614f8ff079"
2144 | dependencies = [
2145 | "yoke",
2146 | "zerofrom",
2147 | "zerovec-derive",
2148 | ]
2149 |
2150 | [[package]]
2151 | name = "zerovec-derive"
2152 | version = "0.10.3"
2153 | source = "registry+https://github.com/rust-lang/crates.io-index"
2154 | checksum = "6eafa6dfb17584ea3e2bd6e76e0cc15ad7af12b09abdd1ca55961bed9b1063c6"
2155 | dependencies = [
2156 | "proc-macro2",
2157 | "quote",
2158 | "syn 2.0.87",
2159 | ]
2160 |
--------------------------------------------------------------------------------