From 2fdb263b53d20fc28a644a800115ad729491df10 Mon Sep 17 00:00:00 2001 From: Atharva Deosthale Date: Tue, 31 Mar 2026 23:19:44 +0530 Subject: [PATCH 1/2] feat rust --- src/icons/optimized/rust.svg | 1 + src/icons/output/_variables.scss | 121 +++---- src/icons/output/info.json | 246 +++++++------- src/icons/output/web-icon.css | 123 +++---- src/icons/output/web-icon.eot | Bin 20812 -> 22472 bytes src/icons/output/web-icon.scss | 242 +++++++------- src/icons/output/web-icon.svg | 123 +++---- src/icons/output/web-icon.symbol.svg | 2 +- src/icons/output/web-icon.ttf | Bin 20644 -> 22304 bytes src/icons/output/web-icon.woff | Bin 13336 -> 14404 bytes src/icons/output/web-icon.woff2 | Bin 11760 -> 12756 bytes src/icons/svg/rust.svg | 1 + .../components/ui/icon/sprite/sprite.svelte | 8 + src/lib/components/ui/icon/types.ts | 1 + src/lib/generated/github-stars.json | 4 +- src/lib/utils/code.ts | 3 + src/lib/utils/references.ts | 3 + .../(marketing)/(assets)/icons/light/rust.svg | 1 + .../(marketing)/(assets)/icons/rust.svg | 1 + .../(marketing)/(components)/platforms.svelte | 9 + src/routes/docs/quick-starts/+page.svelte | 6 + .../docs/quick-starts/rust/+page.markdoc | 307 ++++++++++++++++++ src/routes/docs/quick-starts/rust/prompt.md | 267 +++++++++++++++ src/routes/docs/sdks/+page.markdoc | 23 +- static/images/platforms/dark/rust.svg | 1 + static/images/platforms/light/rust.svg | 1 + static/images/platforms/rust.svg | 1 + 27 files changed, 1071 insertions(+), 424 deletions(-) create mode 100644 src/icons/optimized/rust.svg create mode 100644 src/icons/svg/rust.svg create mode 100644 src/routes/(marketing)/(assets)/icons/light/rust.svg create mode 100644 src/routes/(marketing)/(assets)/icons/rust.svg create mode 100644 src/routes/docs/quick-starts/rust/+page.markdoc create mode 100644 src/routes/docs/quick-starts/rust/prompt.md create mode 100644 static/images/platforms/dark/rust.svg create mode 100644 static/images/platforms/light/rust.svg create mode 100644 static/images/platforms/rust.svg diff --git a/src/icons/optimized/rust.svg b/src/icons/optimized/rust.svg new file mode 100644 index 0000000000..350ce08d06 --- /dev/null +++ b/src/icons/optimized/rust.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/src/icons/output/_variables.scss b/src/icons/output/_variables.scss index dcaa908c0a..2a0a56c17d 100644 --- a/src/icons/output/_variables.scss +++ b/src/icons/output/_variables.scss @@ -5,63 +5,64 @@ $web-icon-refine: "\ea04"; $web-icon-microsoft: "\ea05"; $web-icon-platform: "\ea06"; $web-icon-vue: "\ea07"; -$web-icon-chevron-down: "\ea08"; -$web-icon-firebase: "\ea09"; -$web-icon-github: "\ea0a"; -$web-icon-ticket: "\ea0b"; -$web-icon-sparkle: "\ea0c"; -$web-icon-divider-vertical: "\ea0d"; -$web-icon-nuxt: "\ea0e"; -$web-icon-chevron-up: "\ea0f"; -$web-icon-ycombinator: "\ea10"; -$web-icon-x: "\ea11"; -$web-icon-textmagic: "\ea12"; -$web-icon-daily-dev: "\ea13"; -$web-icon-chevron-right: "\ea14"; -$web-icon-instagram: "\ea15"; -$web-icon-ext-link: "\ea16"; -$web-icon-arrow-right: "\ea17"; -$web-icon-edge: "\ea18"; -$web-icon-download: "\ea19"; -$web-icon-dark: "\ea1a"; -$web-icon-bluesky: "\ea1b"; -$web-icon-plus: "\ea1c"; -$web-icon-check: "\ea1d"; -$web-icon-close: "\ea1e"; -$web-icon-copy: "\ea1f"; -$web-icon-message: "\ea20"; -$web-icon-play: "\ea21"; -$web-icon-remix: "\ea22"; -$web-icon-skills: "\ea23"; -$web-icon-hamburger-menu: "\ea24"; -$web-icon-google: "\ea25"; -$web-icon-rest: "\ea26"; -$web-icon-star: "\ea27"; -$web-icon-mailgun: "\ea28"; -$web-icon-regions: "\ea29"; -$web-icon-youtube: "\ea2a"; -$web-icon-command: "\ea2b"; -$web-icon-logout-right: "\ea2c"; -$web-icon-tanstack: "\ea2d"; -$web-icon-location: "\ea2e"; -$web-icon-arrow-up: "\ea2f"; -$web-icon-linkedin: "\ea30"; -$web-icon-arena: "\ea31"; -$web-icon-twitter: "\ea32"; -$web-icon-customize: "\ea33"; -$web-icon-discord: "\ea34"; -$web-icon-calendar: "\ea35"; -$web-icon-arrow-left: "\ea36"; -$web-icon-sendgrid: "\ea37"; -$web-icon-pop-locations: "\ea38"; -$web-icon-product-hunt: "\ea39"; -$web-icon-appwrite: "\ea3a"; -$web-icon-arrow-ext-link: "\ea3b"; -$web-icon-logout-left: "\ea3c"; -$web-icon-external-icon: "\ea3d"; -$web-icon-apple: "\ea3e"; -$web-icon-tiktok: "\ea3f"; -$web-icon-minus: "\ea40"; -$web-icon-chevron-left: "\ea41"; -$web-icon-light: "\ea42"; -$web-icon-mcp: "\ea43"; +$web-icon-rust: "\ea08"; +$web-icon-chevron-down: "\ea09"; +$web-icon-firebase: "\ea0a"; +$web-icon-github: "\ea0b"; +$web-icon-ticket: "\ea0c"; +$web-icon-sparkle: "\ea0d"; +$web-icon-divider-vertical: "\ea0e"; +$web-icon-nuxt: "\ea0f"; +$web-icon-chevron-up: "\ea10"; +$web-icon-ycombinator: "\ea11"; +$web-icon-x: "\ea12"; +$web-icon-textmagic: "\ea13"; +$web-icon-daily-dev: "\ea14"; +$web-icon-chevron-right: "\ea15"; +$web-icon-instagram: "\ea16"; +$web-icon-ext-link: "\ea17"; +$web-icon-arrow-right: "\ea18"; +$web-icon-edge: "\ea19"; +$web-icon-download: "\ea1a"; +$web-icon-dark: "\ea1b"; +$web-icon-bluesky: "\ea1c"; +$web-icon-plus: "\ea1d"; +$web-icon-check: "\ea1e"; +$web-icon-close: "\ea1f"; +$web-icon-copy: "\ea20"; +$web-icon-message: "\ea21"; +$web-icon-play: "\ea22"; +$web-icon-remix: "\ea23"; +$web-icon-skills: "\ea24"; +$web-icon-hamburger-menu: "\ea25"; +$web-icon-google: "\ea26"; +$web-icon-rest: "\ea27"; +$web-icon-star: "\ea28"; +$web-icon-mailgun: "\ea29"; +$web-icon-regions: "\ea2a"; +$web-icon-youtube: "\ea2b"; +$web-icon-command: "\ea2c"; +$web-icon-logout-right: "\ea2d"; +$web-icon-tanstack: "\ea2e"; +$web-icon-location: "\ea2f"; +$web-icon-arrow-up: "\ea30"; +$web-icon-linkedin: "\ea31"; +$web-icon-arena: "\ea32"; +$web-icon-twitter: "\ea33"; +$web-icon-customize: "\ea34"; +$web-icon-discord: "\ea35"; +$web-icon-calendar: "\ea36"; +$web-icon-arrow-left: "\ea37"; +$web-icon-sendgrid: "\ea38"; +$web-icon-pop-locations: "\ea39"; +$web-icon-product-hunt: "\ea3a"; +$web-icon-appwrite: "\ea3b"; +$web-icon-arrow-ext-link: "\ea3c"; +$web-icon-logout-left: "\ea3d"; +$web-icon-external-icon: "\ea3e"; +$web-icon-apple: "\ea3f"; +$web-icon-tiktok: "\ea40"; +$web-icon-minus: "\ea41"; +$web-icon-chevron-left: "\ea42"; +$web-icon-light: "\ea43"; +$web-icon-mcp: "\ea44"; diff --git a/src/icons/output/info.json b/src/icons/output/info.json index d978b129ba..49f9c070ed 100644 --- a/src/icons/output/info.json +++ b/src/icons/output/info.json @@ -41,364 +41,370 @@ "className": "web-icon-vue", "unicode": "" }, - "chevron-down": { + "rust": { "encodedCode": "\\ea08", "prefix": "web-icon", - "className": "web-icon-chevron-down", + "className": "web-icon-rust", "unicode": "" }, - "firebase": { + "chevron-down": { "encodedCode": "\\ea09", "prefix": "web-icon", - "className": "web-icon-firebase", + "className": "web-icon-chevron-down", "unicode": "" }, - "github": { + "firebase": { "encodedCode": "\\ea0a", "prefix": "web-icon", - "className": "web-icon-github", + "className": "web-icon-firebase", "unicode": "" }, - "ticket": { + "github": { "encodedCode": "\\ea0b", "prefix": "web-icon", - "className": "web-icon-ticket", + "className": "web-icon-github", "unicode": "" }, - "sparkle": { + "ticket": { "encodedCode": "\\ea0c", "prefix": "web-icon", - "className": "web-icon-sparkle", + "className": "web-icon-ticket", "unicode": "" }, - "divider-vertical": { + "sparkle": { "encodedCode": "\\ea0d", "prefix": "web-icon", - "className": "web-icon-divider-vertical", + "className": "web-icon-sparkle", "unicode": "" }, - "nuxt": { + "divider-vertical": { "encodedCode": "\\ea0e", "prefix": "web-icon", - "className": "web-icon-nuxt", + "className": "web-icon-divider-vertical", "unicode": "" }, - "chevron-up": { + "nuxt": { "encodedCode": "\\ea0f", "prefix": "web-icon", - "className": "web-icon-chevron-up", + "className": "web-icon-nuxt", "unicode": "" }, - "ycombinator": { + "chevron-up": { "encodedCode": "\\ea10", "prefix": "web-icon", - "className": "web-icon-ycombinator", + "className": "web-icon-chevron-up", "unicode": "" }, - "x": { + "ycombinator": { "encodedCode": "\\ea11", "prefix": "web-icon", - "className": "web-icon-x", + "className": "web-icon-ycombinator", "unicode": "" }, - "textmagic": { + "x": { "encodedCode": "\\ea12", "prefix": "web-icon", - "className": "web-icon-textmagic", + "className": "web-icon-x", "unicode": "" }, - "daily-dev": { + "textmagic": { "encodedCode": "\\ea13", "prefix": "web-icon", - "className": "web-icon-daily-dev", + "className": "web-icon-textmagic", "unicode": "" }, - "chevron-right": { + "daily-dev": { "encodedCode": "\\ea14", "prefix": "web-icon", - "className": "web-icon-chevron-right", + "className": "web-icon-daily-dev", "unicode": "" }, - "instagram": { + "chevron-right": { "encodedCode": "\\ea15", "prefix": "web-icon", - "className": "web-icon-instagram", + "className": "web-icon-chevron-right", "unicode": "" }, - "ext-link": { + "instagram": { "encodedCode": "\\ea16", "prefix": "web-icon", - "className": "web-icon-ext-link", + "className": "web-icon-instagram", "unicode": "" }, - "arrow-right": { + "ext-link": { "encodedCode": "\\ea17", "prefix": "web-icon", - "className": "web-icon-arrow-right", + "className": "web-icon-ext-link", "unicode": "" }, - "edge": { + "arrow-right": { "encodedCode": "\\ea18", "prefix": "web-icon", - "className": "web-icon-edge", + "className": "web-icon-arrow-right", "unicode": "" }, - "download": { + "edge": { "encodedCode": "\\ea19", "prefix": "web-icon", - "className": "web-icon-download", + "className": "web-icon-edge", "unicode": "" }, - "dark": { + "download": { "encodedCode": "\\ea1a", "prefix": "web-icon", - "className": "web-icon-dark", + "className": "web-icon-download", "unicode": "" }, - "bluesky": { + "dark": { "encodedCode": "\\ea1b", "prefix": "web-icon", - "className": "web-icon-bluesky", + "className": "web-icon-dark", "unicode": "" }, - "plus": { + "bluesky": { "encodedCode": "\\ea1c", "prefix": "web-icon", - "className": "web-icon-plus", + "className": "web-icon-bluesky", "unicode": "" }, - "check": { + "plus": { "encodedCode": "\\ea1d", "prefix": "web-icon", - "className": "web-icon-check", + "className": "web-icon-plus", "unicode": "" }, - "close": { + "check": { "encodedCode": "\\ea1e", "prefix": "web-icon", - "className": "web-icon-close", + "className": "web-icon-check", "unicode": "" }, - "copy": { + "close": { "encodedCode": "\\ea1f", "prefix": "web-icon", - "className": "web-icon-copy", + "className": "web-icon-close", "unicode": "" }, - "message": { + "copy": { "encodedCode": "\\ea20", "prefix": "web-icon", - "className": "web-icon-message", + "className": "web-icon-copy", "unicode": "" }, - "play": { + "message": { "encodedCode": "\\ea21", "prefix": "web-icon", - "className": "web-icon-play", + "className": "web-icon-message", "unicode": "" }, - "remix": { + "play": { "encodedCode": "\\ea22", "prefix": "web-icon", - "className": "web-icon-remix", + "className": "web-icon-play", "unicode": "" }, - "skills": { + "remix": { "encodedCode": "\\ea23", "prefix": "web-icon", - "className": "web-icon-skills", + "className": "web-icon-remix", "unicode": "" }, - "hamburger-menu": { + "skills": { "encodedCode": "\\ea24", "prefix": "web-icon", - "className": "web-icon-hamburger-menu", + "className": "web-icon-skills", "unicode": "" }, - "google": { + "hamburger-menu": { "encodedCode": "\\ea25", "prefix": "web-icon", - "className": "web-icon-google", + "className": "web-icon-hamburger-menu", "unicode": "" }, - "rest": { + "google": { "encodedCode": "\\ea26", "prefix": "web-icon", - "className": "web-icon-rest", + "className": "web-icon-google", "unicode": "" }, - "star": { + "rest": { "encodedCode": "\\ea27", "prefix": "web-icon", - "className": "web-icon-star", + "className": "web-icon-rest", "unicode": "" }, - "mailgun": { + "star": { "encodedCode": "\\ea28", "prefix": "web-icon", - "className": "web-icon-mailgun", + "className": "web-icon-star", "unicode": "" }, - "regions": { + "mailgun": { "encodedCode": "\\ea29", "prefix": "web-icon", - "className": "web-icon-regions", + "className": "web-icon-mailgun", "unicode": "" }, - "youtube": { + "regions": { "encodedCode": "\\ea2a", "prefix": "web-icon", - "className": "web-icon-youtube", + "className": "web-icon-regions", "unicode": "" }, - "command": { + "youtube": { "encodedCode": "\\ea2b", "prefix": "web-icon", - "className": "web-icon-command", + "className": "web-icon-youtube", "unicode": "" }, - "logout-right": { + "command": { "encodedCode": "\\ea2c", "prefix": "web-icon", - "className": "web-icon-logout-right", + "className": "web-icon-command", "unicode": "" }, - "tanstack": { + "logout-right": { "encodedCode": "\\ea2d", "prefix": "web-icon", - "className": "web-icon-tanstack", + "className": "web-icon-logout-right", "unicode": "" }, - "location": { + "tanstack": { "encodedCode": "\\ea2e", "prefix": "web-icon", - "className": "web-icon-location", + "className": "web-icon-tanstack", "unicode": "" }, - "arrow-up": { + "location": { "encodedCode": "\\ea2f", "prefix": "web-icon", - "className": "web-icon-arrow-up", + "className": "web-icon-location", "unicode": "" }, - "linkedin": { + "arrow-up": { "encodedCode": "\\ea30", "prefix": "web-icon", - "className": "web-icon-linkedin", + "className": "web-icon-arrow-up", "unicode": "" }, - "arena": { + "linkedin": { "encodedCode": "\\ea31", "prefix": "web-icon", - "className": "web-icon-arena", + "className": "web-icon-linkedin", "unicode": "" }, - "twitter": { + "arena": { "encodedCode": "\\ea32", "prefix": "web-icon", - "className": "web-icon-twitter", + "className": "web-icon-arena", "unicode": "" }, - "customize": { + "twitter": { "encodedCode": "\\ea33", "prefix": "web-icon", - "className": "web-icon-customize", + "className": "web-icon-twitter", "unicode": "" }, - "discord": { + "customize": { "encodedCode": "\\ea34", "prefix": "web-icon", - "className": "web-icon-discord", + "className": "web-icon-customize", "unicode": "" }, - "calendar": { + "discord": { "encodedCode": "\\ea35", "prefix": "web-icon", - "className": "web-icon-calendar", + "className": "web-icon-discord", "unicode": "" }, - "arrow-left": { + "calendar": { "encodedCode": "\\ea36", "prefix": "web-icon", - "className": "web-icon-arrow-left", + "className": "web-icon-calendar", "unicode": "" }, - "sendgrid": { + "arrow-left": { "encodedCode": "\\ea37", "prefix": "web-icon", - "className": "web-icon-sendgrid", + "className": "web-icon-arrow-left", "unicode": "" }, - "pop-locations": { + "sendgrid": { "encodedCode": "\\ea38", "prefix": "web-icon", - "className": "web-icon-pop-locations", + "className": "web-icon-sendgrid", "unicode": "" }, - "product-hunt": { + "pop-locations": { "encodedCode": "\\ea39", "prefix": "web-icon", - "className": "web-icon-product-hunt", + "className": "web-icon-pop-locations", "unicode": "" }, - "appwrite": { + "product-hunt": { "encodedCode": "\\ea3a", "prefix": "web-icon", - "className": "web-icon-appwrite", + "className": "web-icon-product-hunt", "unicode": "" }, - "arrow-ext-link": { + "appwrite": { "encodedCode": "\\ea3b", "prefix": "web-icon", - "className": "web-icon-arrow-ext-link", + "className": "web-icon-appwrite", "unicode": "" }, - "logout-left": { + "arrow-ext-link": { "encodedCode": "\\ea3c", "prefix": "web-icon", - "className": "web-icon-logout-left", + "className": "web-icon-arrow-ext-link", "unicode": "" }, - "external-icon": { + "logout-left": { "encodedCode": "\\ea3d", "prefix": "web-icon", - "className": "web-icon-external-icon", + "className": "web-icon-logout-left", "unicode": "" }, - "apple": { + "external-icon": { "encodedCode": "\\ea3e", "prefix": "web-icon", - "className": "web-icon-apple", + "className": "web-icon-external-icon", "unicode": "" }, - "tiktok": { + "apple": { "encodedCode": "\\ea3f", "prefix": "web-icon", - "className": "web-icon-tiktok", + "className": "web-icon-apple", "unicode": "" }, - "minus": { + "tiktok": { "encodedCode": "\\ea40", "prefix": "web-icon", - "className": "web-icon-minus", + "className": "web-icon-tiktok", "unicode": "" }, - "chevron-left": { + "minus": { "encodedCode": "\\ea41", "prefix": "web-icon", - "className": "web-icon-chevron-left", + "className": "web-icon-minus", "unicode": "" }, - "light": { + "chevron-left": { "encodedCode": "\\ea42", "prefix": "web-icon", - "className": "web-icon-light", + "className": "web-icon-chevron-left", "unicode": "" }, - "mcp": { + "light": { "encodedCode": "\\ea43", "prefix": "web-icon", - "className": "web-icon-mcp", + "className": "web-icon-light", "unicode": "" + }, + "mcp": { + "encodedCode": "\\ea44", + "prefix": "web-icon", + "className": "web-icon-mcp", + "unicode": "" } } diff --git a/src/icons/output/web-icon.css b/src/icons/output/web-icon.css index 5ecbd31caa..914702986b 100644 --- a/src/icons/output/web-icon.css +++ b/src/icons/output/web-icon.css @@ -41,183 +41,186 @@ .web-icon-vue:before { content: '\ea07'; } -.web-icon-chevron-down:before { +.web-icon-rust:before { content: '\ea08'; } -.web-icon-firebase:before { +.web-icon-chevron-down:before { content: '\ea09'; } -.web-icon-github:before { +.web-icon-firebase:before { content: '\ea0a'; } -.web-icon-ticket:before { +.web-icon-github:before { content: '\ea0b'; } -.web-icon-sparkle:before { +.web-icon-ticket:before { content: '\ea0c'; } -.web-icon-divider-vertical:before { +.web-icon-sparkle:before { content: '\ea0d'; } -.web-icon-nuxt:before { +.web-icon-divider-vertical:before { content: '\ea0e'; } -.web-icon-chevron-up:before { +.web-icon-nuxt:before { content: '\ea0f'; } -.web-icon-ycombinator:before { +.web-icon-chevron-up:before { content: '\ea10'; } -.web-icon-x:before { +.web-icon-ycombinator:before { content: '\ea11'; } -.web-icon-textmagic:before { +.web-icon-x:before { content: '\ea12'; } -.web-icon-daily-dev:before { +.web-icon-textmagic:before { content: '\ea13'; } -.web-icon-chevron-right:before { +.web-icon-daily-dev:before { content: '\ea14'; } -.web-icon-instagram:before { +.web-icon-chevron-right:before { content: '\ea15'; } -.web-icon-ext-link:before { +.web-icon-instagram:before { content: '\ea16'; } -.web-icon-arrow-right:before { +.web-icon-ext-link:before { content: '\ea17'; } -.web-icon-edge:before { +.web-icon-arrow-right:before { content: '\ea18'; } -.web-icon-download:before { +.web-icon-edge:before { content: '\ea19'; } -.web-icon-dark:before { +.web-icon-download:before { content: '\ea1a'; } -.web-icon-bluesky:before { +.web-icon-dark:before { content: '\ea1b'; } -.web-icon-plus:before { +.web-icon-bluesky:before { content: '\ea1c'; } -.web-icon-check:before { +.web-icon-plus:before { content: '\ea1d'; } -.web-icon-close:before { +.web-icon-check:before { content: '\ea1e'; } -.web-icon-copy:before { +.web-icon-close:before { content: '\ea1f'; } -.web-icon-message:before { +.web-icon-copy:before { content: '\ea20'; } -.web-icon-play:before { +.web-icon-message:before { content: '\ea21'; } -.web-icon-remix:before { +.web-icon-play:before { content: '\ea22'; } -.web-icon-skills:before { +.web-icon-remix:before { content: '\ea23'; } -.web-icon-hamburger-menu:before { +.web-icon-skills:before { content: '\ea24'; } -.web-icon-google:before { +.web-icon-hamburger-menu:before { content: '\ea25'; } -.web-icon-rest:before { +.web-icon-google:before { content: '\ea26'; } -.web-icon-star:before { +.web-icon-rest:before { content: '\ea27'; } -.web-icon-mailgun:before { +.web-icon-star:before { content: '\ea28'; } -.web-icon-regions:before { +.web-icon-mailgun:before { content: '\ea29'; } -.web-icon-youtube:before { +.web-icon-regions:before { content: '\ea2a'; } -.web-icon-command:before { +.web-icon-youtube:before { content: '\ea2b'; } -.web-icon-logout-right:before { +.web-icon-command:before { content: '\ea2c'; } -.web-icon-tanstack:before { +.web-icon-logout-right:before { content: '\ea2d'; } -.web-icon-location:before { +.web-icon-tanstack:before { content: '\ea2e'; } -.web-icon-arrow-up:before { +.web-icon-location:before { content: '\ea2f'; } -.web-icon-linkedin:before { +.web-icon-arrow-up:before { content: '\ea30'; } -.web-icon-arena:before { +.web-icon-linkedin:before { content: '\ea31'; } -.web-icon-twitter:before { +.web-icon-arena:before { content: '\ea32'; } -.web-icon-customize:before { +.web-icon-twitter:before { content: '\ea33'; } -.web-icon-discord:before { +.web-icon-customize:before { content: '\ea34'; } -.web-icon-calendar:before { +.web-icon-discord:before { content: '\ea35'; } -.web-icon-arrow-left:before { +.web-icon-calendar:before { content: '\ea36'; } -.web-icon-sendgrid:before { +.web-icon-arrow-left:before { content: '\ea37'; } -.web-icon-pop-locations:before { +.web-icon-sendgrid:before { content: '\ea38'; } -.web-icon-product-hunt:before { +.web-icon-pop-locations:before { content: '\ea39'; } -.web-icon-appwrite:before { +.web-icon-product-hunt:before { content: '\ea3a'; } -.web-icon-arrow-ext-link:before { +.web-icon-appwrite:before { content: '\ea3b'; } -.web-icon-logout-left:before { +.web-icon-arrow-ext-link:before { content: '\ea3c'; } -.web-icon-external-icon:before { +.web-icon-logout-left:before { content: '\ea3d'; } -.web-icon-apple:before { +.web-icon-external-icon:before { content: '\ea3e'; } -.web-icon-tiktok:before { +.web-icon-apple:before { content: '\ea3f'; } -.web-icon-minus:before { +.web-icon-tiktok:before { content: '\ea40'; } -.web-icon-chevron-left:before { +.web-icon-minus:before { content: '\ea41'; } -.web-icon-light:before { +.web-icon-chevron-left:before { content: '\ea42'; } -.web-icon-mcp:before { +.web-icon-light:before { content: '\ea43'; } +.web-icon-mcp:before { + content: '\ea44'; +} diff --git a/src/icons/output/web-icon.eot b/src/icons/output/web-icon.eot index cc7fe4355cee6f69962a4f78b2804e075a0a0e7c..428dc6f9987dfa153830b83e93a3ad03f47dd35d 100644 GIT binary patch delta 2190 zcmY*YZHS!J6~5mYX@Af)}kb8^5>bnkxlxs4xM88bPm!3ZJ=++|(b1y95*=s0+GiXr9*^8*Zi86QQ?1i1=`puh| z?-P`0``p7@-+%SV8yMd}{}0b@?VN{a=qCEAefyhRXCIA!SG*OfeAjim^ zZOmOZ?J*(0@KCgYN`?4WABoBOW~%y&K;i zZ^s|jU#!2I+?!lWx3i7x_j$iD*LbG*M$5Lo*m{48PQ5&RUunxr<%cuP`)A&1FSRet z^4aG*Ugz=7&pK~)ug|?j$dwh-)FbTw<{Fo*4X5EE{0iQN-@-Ncl+MyV9ajCS06M+- z-h3aroob`HvbO+zKrKaCl<4dPFbzs}=6h1fEYA{*nP_EoEPyo0W+3~oie{FS4AYGu z$?_6r07I&!ggnivG9?U`b0tey8m^-~P4={Wu{u%G!BH5XR>JbqV7N}RWmK2Yc*p-) z(TLH*Rg}d+Rc9TJz!0@;X|S?@6|&JfRIMFF4+@=hR&6kBrE;vZl|I9~|Jg1;uc|y8 zpliNcNe{~dGSF4?!$H3yVF6ZG`q051<`?nAYM;swX_y?pMItiVr-(<5(9y?gG*f#G z_$&rqLDZk-Kod^Iq zYi(Nr^J>bakp@~)t}>b^N~tnT_*qj)0otWCtVNAz)HLUeF=0)V;a(yNE=^#V1K$_; z`Hq`l51!H=CVklj~V78NM@o6W)+G!nXON0C1~7;6%z5kIBmp2$&eGNjN~I_LhXd}g^jIL zJTP8J!L#9V!}_LGgtMm(X09oCtp?P}PVQ(uK}eLD+-pka{6Y#ZX-j|qfxz=`oQWfs z9&C8?>c*!&w<@nQKclw`jtu&L7E~mB88t(YYYA5}ZQ%WY7nn{<#+rF`_hV>X; z0CHN}Q!&io{cbW3JYez1um4A6b1+2Avy+}GN8hGA@?PR$t0bL90J<| zh%ch<#2!M*q$gso6+?{Gi-?ktGq6P#f#h_=S}iHvq+UW}k8vCYqo6C8HncLzIXom< z$Sy$YOP|4A1>?g!M?b6GO34)_EKZIVwK^AIjkOBL zl}vY(QOG}w44a!1zLFYUaPBzJzsSPj#b#3anUx}MnA()_uAGdI9f8g9PfmT0!trr( S&zj(mUwq=iODFH4K>iIOdj^95 delta 517 zcmX@Hp7G2gMmC>728Ja86WPpI!Z=^>Pju+6U&g?|*u%iUkdU04Sn&Q&pCtnW(+>s) zR-W{n$~27&JX0AMIDqob3K^-1DSE%RW&_ne0AjNYpa8oo^IRZ%4-l(lo^%0yw?CN6)VUu zF0tX_a${idJp$z4pPa&|tm@3b2viKj{4Y4e;`wd9GH^4$0E#d?y=y5BqbILnlw@{h z^qYKwaXq8+<_ab@#>q|0rkXdvni&`_F))K!IzXBWXxa@176zcdfg}q^{FU?M2h6Ra zVhq*{HVn25b`16m4h)VAPC%7xlN(w7O`gEQI=P;ejnf2VArLrk?qfa7#485WY6HOx z)|2Bn!s>x?6%2bA9T=}L{$k2u;bF03nZcUJ*2Z>??GJkm`#SbJ910v>9J@H4aem;^ z;mY9pz#YPUjK_~>7SAH diff --git a/src/icons/output/web-icon.scss b/src/icons/output/web-icon.scss index 8e3eeef38b..0913ae9ad4 100644 --- a/src/icons/output/web-icon.scss +++ b/src/icons/output/web-icon.scss @@ -23,66 +23,67 @@ .web-icon-microsoft:before { content: "\ea05"; } .web-icon-platform:before { content: "\ea06"; } .web-icon-vue:before { content: "\ea07"; } -.web-icon-chevron-down:before { content: "\ea08"; } -.web-icon-firebase:before { content: "\ea09"; } -.web-icon-github:before { content: "\ea0a"; } -.web-icon-ticket:before { content: "\ea0b"; } -.web-icon-sparkle:before { content: "\ea0c"; } -.web-icon-divider-vertical:before { content: "\ea0d"; } -.web-icon-nuxt:before { content: "\ea0e"; } -.web-icon-chevron-up:before { content: "\ea0f"; } -.web-icon-ycombinator:before { content: "\ea10"; } -.web-icon-x:before { content: "\ea11"; } -.web-icon-textmagic:before { content: "\ea12"; } -.web-icon-daily-dev:before { content: "\ea13"; } -.web-icon-chevron-right:before { content: "\ea14"; } -.web-icon-instagram:before { content: "\ea15"; } -.web-icon-ext-link:before { content: "\ea16"; } -.web-icon-arrow-right:before { content: "\ea17"; } -.web-icon-edge:before { content: "\ea18"; } -.web-icon-download:before { content: "\ea19"; } -.web-icon-dark:before { content: "\ea1a"; } -.web-icon-bluesky:before { content: "\ea1b"; } -.web-icon-plus:before { content: "\ea1c"; } -.web-icon-check:before { content: "\ea1d"; } -.web-icon-close:before { content: "\ea1e"; } -.web-icon-copy:before { content: "\ea1f"; } -.web-icon-message:before { content: "\ea20"; } -.web-icon-play:before { content: "\ea21"; } -.web-icon-remix:before { content: "\ea22"; } -.web-icon-skills:before { content: "\ea23"; } -.web-icon-hamburger-menu:before { content: "\ea24"; } -.web-icon-google:before { content: "\ea25"; } -.web-icon-rest:before { content: "\ea26"; } -.web-icon-star:before { content: "\ea27"; } -.web-icon-mailgun:before { content: "\ea28"; } -.web-icon-regions:before { content: "\ea29"; } -.web-icon-youtube:before { content: "\ea2a"; } -.web-icon-command:before { content: "\ea2b"; } -.web-icon-logout-right:before { content: "\ea2c"; } -.web-icon-tanstack:before { content: "\ea2d"; } -.web-icon-location:before { content: "\ea2e"; } -.web-icon-arrow-up:before { content: "\ea2f"; } -.web-icon-linkedin:before { content: "\ea30"; } -.web-icon-arena:before { content: "\ea31"; } -.web-icon-twitter:before { content: "\ea32"; } -.web-icon-customize:before { content: "\ea33"; } -.web-icon-discord:before { content: "\ea34"; } -.web-icon-calendar:before { content: "\ea35"; } -.web-icon-arrow-left:before { content: "\ea36"; } -.web-icon-sendgrid:before { content: "\ea37"; } -.web-icon-pop-locations:before { content: "\ea38"; } -.web-icon-product-hunt:before { content: "\ea39"; } -.web-icon-appwrite:before { content: "\ea3a"; } -.web-icon-arrow-ext-link:before { content: "\ea3b"; } -.web-icon-logout-left:before { content: "\ea3c"; } -.web-icon-external-icon:before { content: "\ea3d"; } -.web-icon-apple:before { content: "\ea3e"; } -.web-icon-tiktok:before { content: "\ea3f"; } -.web-icon-minus:before { content: "\ea40"; } -.web-icon-chevron-left:before { content: "\ea41"; } -.web-icon-light:before { content: "\ea42"; } -.web-icon-mcp:before { content: "\ea43"; } +.web-icon-rust:before { content: "\ea08"; } +.web-icon-chevron-down:before { content: "\ea09"; } +.web-icon-firebase:before { content: "\ea0a"; } +.web-icon-github:before { content: "\ea0b"; } +.web-icon-ticket:before { content: "\ea0c"; } +.web-icon-sparkle:before { content: "\ea0d"; } +.web-icon-divider-vertical:before { content: "\ea0e"; } +.web-icon-nuxt:before { content: "\ea0f"; } +.web-icon-chevron-up:before { content: "\ea10"; } +.web-icon-ycombinator:before { content: "\ea11"; } +.web-icon-x:before { content: "\ea12"; } +.web-icon-textmagic:before { content: "\ea13"; } +.web-icon-daily-dev:before { content: "\ea14"; } +.web-icon-chevron-right:before { content: "\ea15"; } +.web-icon-instagram:before { content: "\ea16"; } +.web-icon-ext-link:before { content: "\ea17"; } +.web-icon-arrow-right:before { content: "\ea18"; } +.web-icon-edge:before { content: "\ea19"; } +.web-icon-download:before { content: "\ea1a"; } +.web-icon-dark:before { content: "\ea1b"; } +.web-icon-bluesky:before { content: "\ea1c"; } +.web-icon-plus:before { content: "\ea1d"; } +.web-icon-check:before { content: "\ea1e"; } +.web-icon-close:before { content: "\ea1f"; } +.web-icon-copy:before { content: "\ea20"; } +.web-icon-message:before { content: "\ea21"; } +.web-icon-play:before { content: "\ea22"; } +.web-icon-remix:before { content: "\ea23"; } +.web-icon-skills:before { content: "\ea24"; } +.web-icon-hamburger-menu:before { content: "\ea25"; } +.web-icon-google:before { content: "\ea26"; } +.web-icon-rest:before { content: "\ea27"; } +.web-icon-star:before { content: "\ea28"; } +.web-icon-mailgun:before { content: "\ea29"; } +.web-icon-regions:before { content: "\ea2a"; } +.web-icon-youtube:before { content: "\ea2b"; } +.web-icon-command:before { content: "\ea2c"; } +.web-icon-logout-right:before { content: "\ea2d"; } +.web-icon-tanstack:before { content: "\ea2e"; } +.web-icon-location:before { content: "\ea2f"; } +.web-icon-arrow-up:before { content: "\ea30"; } +.web-icon-linkedin:before { content: "\ea31"; } +.web-icon-arena:before { content: "\ea32"; } +.web-icon-twitter:before { content: "\ea33"; } +.web-icon-customize:before { content: "\ea34"; } +.web-icon-discord:before { content: "\ea35"; } +.web-icon-calendar:before { content: "\ea36"; } +.web-icon-arrow-left:before { content: "\ea37"; } +.web-icon-sendgrid:before { content: "\ea38"; } +.web-icon-pop-locations:before { content: "\ea39"; } +.web-icon-product-hunt:before { content: "\ea3a"; } +.web-icon-appwrite:before { content: "\ea3b"; } +.web-icon-arrow-ext-link:before { content: "\ea3c"; } +.web-icon-logout-left:before { content: "\ea3d"; } +.web-icon-external-icon:before { content: "\ea3e"; } +.web-icon-apple:before { content: "\ea3f"; } +.web-icon-tiktok:before { content: "\ea40"; } +.web-icon-minus:before { content: "\ea41"; } +.web-icon-chevron-left:before { content: "\ea42"; } +.web-icon-light:before { content: "\ea43"; } +.web-icon-mcp:before { content: "\ea44"; } $web-icon-search: "\ea01"; $web-icon-arrow-down: "\ea02"; @@ -91,63 +92,64 @@ $web-icon-refine: "\ea04"; $web-icon-microsoft: "\ea05"; $web-icon-platform: "\ea06"; $web-icon-vue: "\ea07"; -$web-icon-chevron-down: "\ea08"; -$web-icon-firebase: "\ea09"; -$web-icon-github: "\ea0a"; -$web-icon-ticket: "\ea0b"; -$web-icon-sparkle: "\ea0c"; -$web-icon-divider-vertical: "\ea0d"; -$web-icon-nuxt: "\ea0e"; -$web-icon-chevron-up: "\ea0f"; -$web-icon-ycombinator: "\ea10"; -$web-icon-x: "\ea11"; -$web-icon-textmagic: "\ea12"; -$web-icon-daily-dev: "\ea13"; -$web-icon-chevron-right: "\ea14"; -$web-icon-instagram: "\ea15"; -$web-icon-ext-link: "\ea16"; -$web-icon-arrow-right: "\ea17"; -$web-icon-edge: "\ea18"; -$web-icon-download: "\ea19"; -$web-icon-dark: "\ea1a"; -$web-icon-bluesky: "\ea1b"; -$web-icon-plus: "\ea1c"; -$web-icon-check: "\ea1d"; -$web-icon-close: "\ea1e"; -$web-icon-copy: "\ea1f"; -$web-icon-message: "\ea20"; -$web-icon-play: "\ea21"; -$web-icon-remix: "\ea22"; -$web-icon-skills: "\ea23"; -$web-icon-hamburger-menu: "\ea24"; -$web-icon-google: "\ea25"; -$web-icon-rest: "\ea26"; -$web-icon-star: "\ea27"; -$web-icon-mailgun: "\ea28"; -$web-icon-regions: "\ea29"; -$web-icon-youtube: "\ea2a"; -$web-icon-command: "\ea2b"; -$web-icon-logout-right: "\ea2c"; -$web-icon-tanstack: "\ea2d"; -$web-icon-location: "\ea2e"; -$web-icon-arrow-up: "\ea2f"; -$web-icon-linkedin: "\ea30"; -$web-icon-arena: "\ea31"; -$web-icon-twitter: "\ea32"; -$web-icon-customize: "\ea33"; -$web-icon-discord: "\ea34"; -$web-icon-calendar: "\ea35"; -$web-icon-arrow-left: "\ea36"; -$web-icon-sendgrid: "\ea37"; -$web-icon-pop-locations: "\ea38"; -$web-icon-product-hunt: "\ea39"; -$web-icon-appwrite: "\ea3a"; -$web-icon-arrow-ext-link: "\ea3b"; -$web-icon-logout-left: "\ea3c"; -$web-icon-external-icon: "\ea3d"; -$web-icon-apple: "\ea3e"; -$web-icon-tiktok: "\ea3f"; -$web-icon-minus: "\ea40"; -$web-icon-chevron-left: "\ea41"; -$web-icon-light: "\ea42"; -$web-icon-mcp: "\ea43"; +$web-icon-rust: "\ea08"; +$web-icon-chevron-down: "\ea09"; +$web-icon-firebase: "\ea0a"; +$web-icon-github: "\ea0b"; +$web-icon-ticket: "\ea0c"; +$web-icon-sparkle: "\ea0d"; +$web-icon-divider-vertical: "\ea0e"; +$web-icon-nuxt: "\ea0f"; +$web-icon-chevron-up: "\ea10"; +$web-icon-ycombinator: "\ea11"; +$web-icon-x: "\ea12"; +$web-icon-textmagic: "\ea13"; +$web-icon-daily-dev: "\ea14"; +$web-icon-chevron-right: "\ea15"; +$web-icon-instagram: "\ea16"; +$web-icon-ext-link: "\ea17"; +$web-icon-arrow-right: "\ea18"; +$web-icon-edge: "\ea19"; +$web-icon-download: "\ea1a"; +$web-icon-dark: "\ea1b"; +$web-icon-bluesky: "\ea1c"; +$web-icon-plus: "\ea1d"; +$web-icon-check: "\ea1e"; +$web-icon-close: "\ea1f"; +$web-icon-copy: "\ea20"; +$web-icon-message: "\ea21"; +$web-icon-play: "\ea22"; +$web-icon-remix: "\ea23"; +$web-icon-skills: "\ea24"; +$web-icon-hamburger-menu: "\ea25"; +$web-icon-google: "\ea26"; +$web-icon-rest: "\ea27"; +$web-icon-star: "\ea28"; +$web-icon-mailgun: "\ea29"; +$web-icon-regions: "\ea2a"; +$web-icon-youtube: "\ea2b"; +$web-icon-command: "\ea2c"; +$web-icon-logout-right: "\ea2d"; +$web-icon-tanstack: "\ea2e"; +$web-icon-location: "\ea2f"; +$web-icon-arrow-up: "\ea30"; +$web-icon-linkedin: "\ea31"; +$web-icon-arena: "\ea32"; +$web-icon-twitter: "\ea33"; +$web-icon-customize: "\ea34"; +$web-icon-discord: "\ea35"; +$web-icon-calendar: "\ea36"; +$web-icon-arrow-left: "\ea37"; +$web-icon-sendgrid: "\ea38"; +$web-icon-pop-locations: "\ea39"; +$web-icon-product-hunt: "\ea3a"; +$web-icon-appwrite: "\ea3b"; +$web-icon-arrow-ext-link: "\ea3c"; +$web-icon-logout-left: "\ea3d"; +$web-icon-external-icon: "\ea3e"; +$web-icon-apple: "\ea3f"; +$web-icon-tiktok: "\ea40"; +$web-icon-minus: "\ea41"; +$web-icon-chevron-left: "\ea42"; +$web-icon-light: "\ea43"; +$web-icon-mcp: "\ea44"; diff --git a/src/icons/output/web-icon.svg b/src/icons/output/web-icon.svg index b896fa4515..d8dd9ef6d6 100644 --- a/src/icons/output/web-icon.svg +++ b/src/icons/output/web-icon.svg @@ -28,185 +28,188 @@ - + diff --git a/src/icons/output/web-icon.symbol.svg b/src/icons/output/web-icon.symbol.svg index f8db3f3aa7..88d28b1b88 100644 --- a/src/icons/output/web-icon.symbol.svg +++ b/src/icons/output/web-icon.symbol.svg @@ -3,4 +3,4 @@ - \ No newline at end of file + \ No newline at end of file diff --git a/src/icons/output/web-icon.ttf b/src/icons/output/web-icon.ttf index b08109fe005cb56bd0c07e3483a1b150e6123750..f2ae1b364d8d02ca113a16ac5c79ffe914209113 100644 GIT binary patch delta 2216 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 DekFeh diff --git a/src/icons/output/web-icon.woff b/src/icons/output/web-icon.woff index dd1fb629d8fbc0a31552a8fef1b541a1ac3ca190..b82ea54832966c9e95e68236ad47b01f7e1369eb 100644 GIT binary patch delta 13967 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

8#XlpoG`#$E|~&Y@Z^j?>`Qq50Db92 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 delta 12913 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 bux+lTiT+>88+EP>HYRp8?*@avW*^z{3Wo=Q diff --git a/src/icons/output/web-icon.woff2 b/src/icons/output/web-icon.woff2 index b8d37b92483c2ced69e70238bbd61a74e240971b..96501b80972a495d9d21d2c8829a464b6654ec54 100644 GIT binary patch literal 12756 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 aBiT+dC=c5}v19^cK)&@E@T`ML3jhFO<*kYU literal 11760 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 diff --git a/src/icons/svg/rust.svg b/src/icons/svg/rust.svg new file mode 100644 index 0000000000..1cf4dafe68 --- /dev/null +++ b/src/icons/svg/rust.svg @@ -0,0 +1 @@ + diff --git a/src/lib/components/ui/icon/sprite/sprite.svelte b/src/lib/components/ui/icon/sprite/sprite.svelte index 905b80b55f..2461ddf67f 100644 --- a/src/lib/components/ui/icon/sprite/sprite.svelte +++ b/src/lib/components/ui/icon/sprite/sprite.svelte @@ -57,6 +57,14 @@ fill="currentColor" > + + + = { [Platform.ServerGraphql]: 'graphql', [Platform.ServerRest]: 'http', [Platform.ServerGo]: 'go', + [Platform.ServerRust]: 'rust', vue: 'html', svelte: 'html' }; diff --git a/src/lib/utils/references.ts b/src/lib/utils/references.ts index be37059f1f..3a4fe4f3fd 100644 --- a/src/lib/utils/references.ts +++ b/src/lib/utils/references.ts @@ -61,6 +61,7 @@ export const Platform = { ServerGo: 'server-go', ServerSwift: 'server-swift', ServerKotlin: 'server-kotlin', + ServerRust: 'server-rust', ServerJava: 'server-java', ServerGraphql: 'server-graphql', ServerRest: 'server-rest' @@ -100,6 +101,7 @@ export const platformMap: Record = { [Platform.ServerJava]: 'Java', [Platform.ServerGraphql]: 'GraphQL', [Platform.ServerRest]: 'REST', + [Platform.ServerRust]: 'Rust', [Platform.ServerGo]: 'Go', sh: 'Shell', js: 'JavaScript', @@ -138,6 +140,7 @@ export const platformMap: Record = { svelte: 'Svelte', groovy: 'Groovy', go: 'Go', + rust: 'Rust', dockerfile: 'Dockerfile', docker: 'Dockerfile', ini: 'INI', diff --git a/src/routes/(marketing)/(assets)/icons/light/rust.svg b/src/routes/(marketing)/(assets)/icons/light/rust.svg new file mode 100644 index 0000000000..9367109a2e --- /dev/null +++ b/src/routes/(marketing)/(assets)/icons/light/rust.svg @@ -0,0 +1 @@ + diff --git a/src/routes/(marketing)/(assets)/icons/rust.svg b/src/routes/(marketing)/(assets)/icons/rust.svg new file mode 100644 index 0000000000..eb2b2d28a7 --- /dev/null +++ b/src/routes/(marketing)/(assets)/icons/rust.svg @@ -0,0 +1 @@ + diff --git a/src/routes/(marketing)/(components)/platforms.svelte b/src/routes/(marketing)/(components)/platforms.svelte index 5913dad655..70d7f6814e 100644 --- a/src/routes/(marketing)/(components)/platforms.svelte +++ b/src/routes/(marketing)/(components)/platforms.svelte @@ -25,6 +25,8 @@ import ReactNative from '../(assets)/icons/react-native.svg'; import TanStack from '../(assets)/icons/tanstack.svg'; import TanStackLight from '../(assets)/icons/light/tanstack.svg'; + import Rust from '../(assets)/icons/rust.svg'; + import RustLight from '../(assets)/icons/light/rust.svg'; import GradientText from '$lib/components/fancy/gradient-text.svelte'; import Noise from '$lib/components/fancy/noise.svelte'; import { Tooltip } from 'bits-ui'; @@ -115,6 +117,13 @@ href: '/docs/quick-starts/dart', primary: '#01579B', secondary: '#29B6F6' + }, + { + name: 'Rust', + dark: Rust, + light: RustLight, + href: '/docs/quick-starts/rust', + primary: '#CE422B' } ]; diff --git a/src/routes/docs/quick-starts/+page.svelte b/src/routes/docs/quick-starts/+page.svelte index a20ddb00f2..95009f50bd 100644 --- a/src/routes/docs/quick-starts/+page.svelte +++ b/src/routes/docs/quick-starts/+page.svelte @@ -172,6 +172,12 @@ icon: 'icon-kotlin', image: '/images/blog/placeholder.png', href: 'kotlin' + }, + { + title: 'Rust', + icon: 'web-icon-rust', + image: '/images/blog/placeholder.png', + href: 'rust' } ] } diff --git a/src/routes/docs/quick-starts/rust/+page.markdoc b/src/routes/docs/quick-starts/rust/+page.markdoc new file mode 100644 index 0000000000..6a38495796 --- /dev/null +++ b/src/routes/docs/quick-starts/rust/+page.markdoc @@ -0,0 +1,307 @@ +--- +layout: article +title: Start with Rust +description: Learn to get started with server integrations with Appwrite Rust SDK. +difficulty: beginner +readtime: 5 +back: /docs/quick-starts +--- +Learn how to setup your first Rust project powered by Appwrite. +{% section #step-1 step=1 title="Create project" %} +Head to the [Appwrite Console](https://cloud.appwrite.io/console). + +If this is your first time using Appwrite, create an account and create your first project. + +{% only_dark %} +![Create project screen](/images/docs/quick-starts/dark/create-project.png) +{% /only_dark %} +{% only_light %} +![Create project screen](/images/docs/quick-starts/create-project.png) +{% /only_light %} + +Then, under **Integrate with your server**, add an **API Key** with the following scopes. + +{% only_dark %} +![Server integrations](/images/docs/quick-starts/dark/integrate-server.png) +{% /only_dark %} +{% only_light %} +![Server integrations](/images/docs/quick-starts/integrate-server.png) +{% /only_light %} + +| Category {% width=120 %} | Required scopes | Purpose | +|-----------|-----------------------|---------| +| Database | `databases.write` | Allows API key to create, update, and delete [databases](/docs/products/databases/databases). | +| | `tables.write` | Allows API key to create, update, and delete [tables](/docs/products/databases/tables). | +| | `columns.write` | Allows API key to create, update, and delete [columns](/docs/products/databases/tables#columns). | +| | `rows.read` | Allows API key to read [rows](/docs/products/databases/rows). | +| | `rows.write` | Allows API key to create, update, and delete [rows](/docs/products/databases/rows). | + +Other scopes are optional. + +{% only_dark %} +![Project settings screen](/images/docs/quick-starts/dark/project-id.png) +{% /only_dark %} +{% only_light %} +![Project settings screen](/images/docs/quick-starts/project-id.png) +{% /only_light %} + +{% /section %} +{% section #step-2 step=2 title="Create Rust project" %} + +Create a new Rust application. + +```sh +cargo new my_app +cd my_app +``` + +{% /section %} +{% section #step-3 step=3 title="Install Appwrite" %} + +Install the Rust Appwrite SDK and its dependencies. + +```sh +cargo add appwrite +cargo add tokio -F full +cargo add serde_json +``` + +{% /section %} +{% section #step-4 step=4 title="Import Appwrite" %} + +Find your project ID in the **Settings** page. Also, click on the **View API Keys** button to find the API key that was created earlier. + +{% only_dark %} +![Project settings screen](/images/docs/quick-starts/dark/project-id.png) +{% /only_dark %} +{% only_light %} +![Project settings screen](/images/docs/quick-starts/project-id.png) +{% /only_light %} + +Open `src/main.rs` and initialize the Appwrite Client. Replace `` with your project ID and `` with your API key. + +```rust +use appwrite::Client; +use appwrite::services::tables_db::TablesDB; +use appwrite::id::ID; +use serde_json::json; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let client = Client::new() + .set_endpoint("https://.cloud.appwrite.io/v1") + .set_project("") + .set_key(""); + + Ok(()) +} +``` + +{% /section %} +{% section #step-5 step=5 title="Initialize database" %} + +Once the Appwrite Client is initialized, create a function to configure a todo table. + +```rust +async fn prepare_database( + tables_db: &TablesDB, +) -> Result<(String, String), Box> { + let todo_database = tables_db.create( + ID::unique(), + "TodosDB", + None, + ).await?; + + let todo_table = tables_db.create_table( + &todo_database.id, + ID::unique(), + "Todos", + None, None, None, None, None, + ).await?; + + tables_db.create_varchar_column( + &todo_database.id, + &todo_table.id, + "title", + 255, + true, + None, None, None, + ).await?; + + tables_db.create_text_column( + &todo_database.id, + &todo_table.id, + "description", + false, + Some("This is a test description."), + None, None, + ).await?; + + tables_db.create_boolean_column( + &todo_database.id, + &todo_table.id, + "isComplete", + true, + None, None, + ).await?; + + Ok((todo_database.id, todo_table.id)) +} +``` + +{% /section %} +{% section #step-6 step=6 title="Add rows" %} +Create a function to add some mock data into your new table. + +```rust +async fn seed_database( + tables_db: &TablesDB, + database_id: &str, + table_id: &str, +) -> Result<(), Box> { + tables_db.create_row( + database_id, + table_id, + ID::unique(), + json!({ + "title": "Buy apples", + "description": "At least 2KGs", + "isComplete": true + }), + None, None, + ).await?; + + tables_db.create_row( + database_id, + table_id, + ID::unique(), + json!({ + "title": "Wash the apples", + "isComplete": true + }), + None, None, + ).await?; + + tables_db.create_row( + database_id, + table_id, + ID::unique(), + json!({ + "title": "Cut the apples", + "description": "Don't forget to pack them in a box", + "isComplete": false + }), + None, None, + ).await?; + + Ok(()) +} +``` + +{% /section %} +{% section #step-7 step=7 title="Retrieve rows" %} + +Create a function to retrieve the mock todo data and execute the functions in `main`. + +```rust +use appwrite::query::Query; + +async fn get_todos( + tables_db: &TablesDB, + database_id: &str, + table_id: &str, +) -> Result<(), Box> { + // Retrieve rows (default limit is 25) + let todos = tables_db.list_rows( + database_id, + table_id, + None, None, None, None, + ).await?; + + println!("Todos:"); + for todo in &todos.rows { + println!("Title: {}\nDescription: {}\nIs Todo Complete: {}\n", + todo.get::("title").unwrap_or_default(), + todo.get::("description").unwrap_or_default(), + todo.get::("isComplete").unwrap_or_default(), + ); + } + + // Use queries to filter completed todos with pagination + let completed_todos = tables_db.list_rows( + database_id, + table_id, + Some(vec![ + Query::equal("isComplete", true).to_string(), + Query::order_desc("$createdAt").to_string(), + Query::limit(5).to_string(), + ]), + None, None, None, + ).await?; + + println!("Completed todos (limited to 5):"); + for todo in &completed_todos.rows { + println!("Title: {}\nDescription: {}\nIs Todo Complete: {}\n", + todo.get::("title").unwrap_or_default(), + todo.get::("description").unwrap_or_default(), + todo.get::("isComplete").unwrap_or_default(), + ); + } + + // Query for incomplete todos + let incomplete_todos = tables_db.list_rows( + database_id, + table_id, + Some(vec![ + Query::equal("isComplete", false).to_string(), + Query::order_asc("title").to_string(), + ]), + None, None, None, + ).await?; + + println!("Incomplete todos (ordered by title):"); + for todo in &incomplete_todos.rows { + println!("Title: {}\nDescription: {}\nIs Todo Complete: {}\n", + todo.get::("title").unwrap_or_default(), + todo.get::("description").unwrap_or_default(), + todo.get::("isComplete").unwrap_or_default(), + ); + } + + Ok(()) +} +``` + +Make sure to update `main()` with the functions you created. Your `main()` function should look something like this: + +```rust +use appwrite::Client; +use appwrite::services::tables_db::TablesDB; +use appwrite::id::ID; +use appwrite::query::Query; +use serde_json::json; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let client = Client::new() + .set_endpoint("https://.cloud.appwrite.io/v1") + .set_project("") + .set_key(""); + + let tables_db = TablesDB::new(&client); + + let (database_id, table_id) = prepare_database(&tables_db).await?; + seed_database(&tables_db, &database_id, &table_id).await?; + get_todos(&tables_db, &database_id, &table_id).await?; + + Ok(()) +} +``` + +{% /section %} + +{% section #step-8 step=8 title="All set" %} + +Run your project with `cargo run` and view the response in your console. + +{% /section %} diff --git a/src/routes/docs/quick-starts/rust/prompt.md b/src/routes/docs/quick-starts/rust/prompt.md new file mode 100644 index 0000000000..434cdd0261 --- /dev/null +++ b/src/routes/docs/quick-starts/rust/prompt.md @@ -0,0 +1,267 @@ +## Create a Rust app with Appwrite server integration + +Create a Rust app with Appwrite server integration that creates a todo database, seeds it with data, and retrieves rows. + +Do exactly these steps in order. Confirm each step succeeds before continuing. If any command fails, show the error and fix it automatically. + +## Step 1: Create project in Appwrite Console + +- If this is the user's first time using Appwrite, guide them to create an account and project at https://cloud.appwrite.io/console +- Under **Integrate with your server**, add an **API Key** with the following scopes: + +| Category | Required scopes | Purpose | +| -------- | ----------------- | ------------------------------------------------------ | +| Database | `databases.write` | Allows API key to create, update, and delete databases | +| | `tables.write` | Allows API key to create, update, and delete tables | +| | `columns.write` | Allows API key to create, update, and delete columns | +| | `rows.read` | Allows API key to read rows | +| | `rows.write` | Allows API key to create, update, and delete rows | + +- Other scopes are optional. + +## Step 2: Create Rust project + +- If you already have a Rust project open, stay in it and use it. +- Otherwise, run: + +```sh +cargo new my_app +cd my_app +``` + +## Step 3: Install Appwrite SDK + +- Run: + +```sh +cargo add appwrite +cargo add tokio -F full +cargo add serde_json +``` + +## Step 4: Import Appwrite and initialize client (ask user for details; never assume) + +- Ask the user for: + - Appwrite Cloud Region (e.g. `fra`, `nyc`) + - **Project ID** (from Console -> Settings) + - **API Key** (from Console -> View API Keys) +- Open `src/main.rs` and initialize the Appwrite Client: + +```rust +use appwrite::Client; +use appwrite::services::tables_db::TablesDB; +use appwrite::id::ID; +use serde_json::json; + +#[tokio::main] +async fn main() -> Result<(), Box> { + let client = Client::new() + .set_endpoint("https://.cloud.appwrite.io/v1") + .set_project("") + .set_key(""); + + Ok(()) +} +``` + +## Step 5: Initialize database + +- Create a function to configure a todo table: + +```rust +async fn prepare_database( + tables_db: &TablesDB, +) -> Result<(String, String), Box> { + let todo_database = tables_db.create( + ID::unique(), + "TodosDB", + None, + ).await?; + + let todo_table = tables_db.create_table( + &todo_database.id, + ID::unique(), + "Todos", + None, None, None, None, None, + ).await?; + + tables_db.create_varchar_column( + &todo_database.id, + &todo_table.id, + "title", + 255, + true, + None, None, None, + ).await?; + + tables_db.create_text_column( + &todo_database.id, + &todo_table.id, + "description", + false, + Some("This is a test description."), + None, None, + ).await?; + + tables_db.create_boolean_column( + &todo_database.id, + &todo_table.id, + "isComplete", + true, + None, None, + ).await?; + + Ok((todo_database.id, todo_table.id)) +} +``` + +## Step 6: Add rows (seed database) + +- Create a function to add mock data into the table: + +```rust +async fn seed_database( + tables_db: &TablesDB, + database_id: &str, + table_id: &str, +) -> Result<(), Box> { + tables_db.create_row( + database_id, + table_id, + ID::unique(), + json!({ + "title": "Buy apples", + "description": "At least 2KGs", + "isComplete": true + }), + None, None, + ).await?; + + tables_db.create_row( + database_id, + table_id, + ID::unique(), + json!({ + "title": "Wash the apples", + "isComplete": true + }), + None, None, + ).await?; + + tables_db.create_row( + database_id, + table_id, + ID::unique(), + json!({ + "title": "Cut the apples", + "description": "Don't forget to pack them in a box", + "isComplete": false + }), + None, None, + ).await?; + + Ok(()) +} +``` + +## Step 7: Retrieve rows + +- Add the query import and create functions to retrieve todos: + +```rust +use appwrite::query::Query; + +async fn get_todos( + tables_db: &TablesDB, + database_id: &str, + table_id: &str, +) -> Result<(), Box> { + let todos = tables_db.list_rows( + database_id, + table_id, + None, None, None, None, + ).await?; + + println!("Todos:"); + for todo in &todos.rows { + println!("Title: {}\nDescription: {}\nIs Todo Complete: {}\n", + todo.get::("title").unwrap_or_default(), + todo.get::("description").unwrap_or_default(), + todo.get::("isComplete").unwrap_or_default(), + ); + } + + let completed_todos = tables_db.list_rows( + database_id, + table_id, + Some(vec![ + Query::equal("isComplete", true).to_string(), + Query::order_desc("$createdAt").to_string(), + Query::limit(5).to_string(), + ]), + None, None, None, + ).await?; + + println!("Completed todos (limited to 5):"); + for todo in &completed_todos.rows { + println!("Title: {}\nDescription: {}\nIs Todo Complete: {}\n", + todo.get::("title").unwrap_or_default(), + todo.get::("description").unwrap_or_default(), + todo.get::("isComplete").unwrap_or_default(), + ); + } + + let incomplete_todos = tables_db.list_rows( + database_id, + table_id, + Some(vec![ + Query::equal("isComplete", false).to_string(), + Query::order_asc("title").to_string(), + ]), + None, None, None, + ).await?; + + println!("Incomplete todos (ordered by title):"); + for todo in &incomplete_todos.rows { + println!("Title: {}\nDescription: {}\nIs Todo Complete: {}\n", + todo.get::("title").unwrap_or_default(), + todo.get::("description").unwrap_or_default(), + todo.get::("isComplete").unwrap_or_default(), + ); + } + + Ok(()) +} +``` + +## Step 8: Update main function and run + +- Update `main()` to call all functions: + +```rust +#[tokio::main] +async fn main() -> Result<(), Box> { + let client = Client::new() + .set_endpoint("https://.cloud.appwrite.io/v1") + .set_project("") + .set_key(""); + + let tables_db = TablesDB::new(&client); + + let (database_id, table_id) = prepare_database(&tables_db).await?; + seed_database(&tables_db, &database_id, &table_id).await?; + get_todos(&tables_db, &database_id, &table_id).await?; + + Ok(()) +} +``` + +- Run: `cargo run` +- View the response in the console + +## Deliverables + +- A running Rust app with working Appwrite server integration +- Files created: `Cargo.toml`, `src/main.rs` +- A **TodosDB** database with a **Todos** table containing `title`, `description`, and `isComplete` columns +- Three seeded todo rows with the ability to query and filter them diff --git a/src/routes/docs/sdks/+page.markdoc b/src/routes/docs/sdks/+page.markdoc index be34b6aa3b..61340e024b 100644 --- a/src/routes/docs/sdks/+page.markdoc +++ b/src/routes/docs/sdks/+page.markdoc @@ -111,7 +111,13 @@ Server libraries for integrating with Appwrite to build server side integrations {% only_light %}{% icon_image src="/images/platforms/kotlin.svg" alt="Kotlin logo" size="m" /%}{% /only_light %} * Kotlin SDK `14.1.0` * [appwrite/sdk-for-kotlin](https://github.com/appwrite/sdk-for-kotlin) -* +* +--- +* {% only_dark %}{% icon_image src="/images/platforms/dark/rust.svg" alt="Rust logo" size="m" /%}{% /only_dark %} +{% only_light %}{% icon_image src="/images/platforms/rust.svg" alt="Rust logo" size="m" /%}{% /only_light %} +* Rust SDK `0.2.0` +* [appwrite/sdk-for-rust](https://github.com/appwrite/sdk-for-rust) +* {% /table %} If you would like to help us extend our platforms and SDKs stack, you are more than welcome to contact us or contribute to the [Appwrite SDK Generator](https://github.com/appwrite/sdk-generator) project GitHub repository and read our contribution guide. @@ -278,6 +284,15 @@ ID.unique() // Generate a custom ID ID.custom("my-custom-id") ``` +```rust +use appwrite::id::ID; + +// Generate a unique ID +ID::unique() + +// Generate a custom ID +ID::custom("my-custom-id") +``` {% /multicode %} {% /tabsitem %} {% /tabs %} @@ -397,6 +412,12 @@ You can discover the available enums in each SDK at the source. * Kotlin SDK `14.1.0` * [appwrite/sdk-for-kotlin](https://github.com/appwrite/sdk-for-kotlin/tree/dev/src/main/kotlin/io/appwrite/enums) * +--- +* {% only_dark %}{% icon_image src="/images/platforms/dark/rust.svg" alt="Rust logo" size="m" /%}{% /only_dark %} +{% only_light %}{% icon_image src="/images/platforms/rust.svg" alt="Rust logo" size="m" /%}{% /only_light %} +* Rust SDK `0.2.0` +* [appwrite/sdk-for-rust](https://github.com/appwrite/sdk-for-rust/tree/dev/src/enums) +* {% /table %} {% /tabsitem %} {% /tabs %} diff --git a/static/images/platforms/dark/rust.svg b/static/images/platforms/dark/rust.svg new file mode 100644 index 0000000000..56058cdb7a --- /dev/null +++ b/static/images/platforms/dark/rust.svg @@ -0,0 +1 @@ + diff --git a/static/images/platforms/light/rust.svg b/static/images/platforms/light/rust.svg new file mode 100644 index 0000000000..56058cdb7a --- /dev/null +++ b/static/images/platforms/light/rust.svg @@ -0,0 +1 @@ + diff --git a/static/images/platforms/rust.svg b/static/images/platforms/rust.svg new file mode 100644 index 0000000000..7364d9ede6 --- /dev/null +++ b/static/images/platforms/rust.svg @@ -0,0 +1 @@ + From a0bb4eb4b766f9d72c3495460d9f586af1429ac0 Mon Sep 17 00:00:00 2001 From: Atharva Deosthale Date: Tue, 31 Mar 2026 23:27:10 +0530 Subject: [PATCH 2/2] ai docs mention --- src/routes/docs/tooling/ai/+layout.svelte | 4 ++++ .../docs/tooling/ai/quickstart-prompts/+page.markdoc | 3 +++ .../docs/tooling/ai/quickstart-prompts/rust/+page.markdoc | 8 ++++++++ 3 files changed, 15 insertions(+) create mode 100644 src/routes/docs/tooling/ai/quickstart-prompts/rust/+page.markdoc diff --git a/src/routes/docs/tooling/ai/+layout.svelte b/src/routes/docs/tooling/ai/+layout.svelte index f93b6106f1..8d8f89f405 100644 --- a/src/routes/docs/tooling/ai/+layout.svelte +++ b/src/routes/docs/tooling/ai/+layout.svelte @@ -210,6 +210,10 @@ { label: 'Kotlin', href: '/docs/tooling/ai/quickstart-prompts/kotlin' + }, + { + label: 'Rust', + href: '/docs/tooling/ai/quickstart-prompts/rust' } ] }, diff --git a/src/routes/docs/tooling/ai/quickstart-prompts/+page.markdoc b/src/routes/docs/tooling/ai/quickstart-prompts/+page.markdoc index 3f6ef4a975..e4d89499ea 100644 --- a/src/routes/docs/tooling/ai/quickstart-prompts/+page.markdoc +++ b/src/routes/docs/tooling/ai/quickstart-prompts/+page.markdoc @@ -119,4 +119,7 @@ Use the following quick start prompts with your preferred AI assistant to integr {% cards_item href="/docs/tooling/ai/quickstart-prompts/kotlin" title="Kotlin" icon="icon-kotlin" %} {% /cards_item %} +{% cards_item href="/docs/tooling/ai/quickstart-prompts/rust" title="Rust" icon="web-icon-rust" %} +{% /cards_item %} + {% /cards %} diff --git a/src/routes/docs/tooling/ai/quickstart-prompts/rust/+page.markdoc b/src/routes/docs/tooling/ai/quickstart-prompts/rust/+page.markdoc new file mode 100644 index 0000000000..28c2793318 --- /dev/null +++ b/src/routes/docs/tooling/ai/quickstart-prompts/rust/+page.markdoc @@ -0,0 +1,8 @@ +--- +layout: article +title: Rust +description: Quickstart prompt for integrating Appwrite with Rust. +prompt: /docs/quick-starts/rust +--- + +{% prompt_content /%}