{"id":24467,"date":"2023-05-23T19:12:32","date_gmt":"2023-05-23T15:42:32","guid":{"rendered":"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/"},"modified":"2023-05-23T19:12:32","modified_gmt":"2023-05-23T15:42:32","slug":"getting-started-with-grpc-in-rust-39nm","status":"publish","type":"post","link":"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/","title":{"rendered":"\u0634\u0631\u0648\u0639 \u06a9\u0627\u0631 \u0628\u0627 gRPC \u062f\u0631 Rust"},"content":{"rendered":"<div data-article-id=\"1477560\" id=\"article-body\">\n<p>\u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633 \u0647\u0627 \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0648\u0634 \u0647\u0627\u06cc \u0627\u0631\u062c\u062d \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0648 \u0642\u0648\u06cc \u0627\u0633\u062a.  \u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u062a\u0642\u0633\u06cc\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af \u0628\u0647 \u0627\u062c\u0632\u0627\u06cc \u06a9\u0648\u0686\u06a9\u062a\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u062e\u0648\u0628\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0646\u062f\u060c \u06cc\u06a9 \u06a9\u0627\u0631 \u062e\u0627\u0635 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u0646\u062f \u0648 \u0627\u0632 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0632 \u0631\u0627\u0628\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 (API) \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0622\u0646\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u0646\u062f.<\/p>\n<p>\u0627\u0631\u062a\u0628\u0627\u0637\u0627\u062a \u06cc\u06a9 \u0628\u062e\u0634 \u0627\u0633\u0627\u0633\u06cc \u0627\u0632 \u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633 \u0647\u0627 \u0627\u0633\u062a.  \u0646\u0642\u0634 \u0645\u0647\u0645\u06cc \u062f\u0631 \u0627\u062c\u0627\u0632\u0647 \u062f\u0627\u062f\u0646 \u0628\u0647 \u0633\u0631\u0648\u06cc\u0633\u200c\u0647\u0627 \u0628\u0627 \u06cc\u06a9\u062f\u06cc\u06af\u0631 \u062f\u0631 \u0632\u0645\u06cc\u0646\u0647 \u0628\u0632\u0631\u06af\u062a\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062f\u0627\u0631\u062f.  \u0686\u0646\u062f \u0646\u0645\u0648\u0646\u0647 \u0627\u0632 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0647\u0627\u06cc \u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633 \u0628\u0631\u0627\u06cc \u0628\u0631\u0642\u0631\u0627\u0631\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0628\u0627 \u06cc\u06a9\u062f\u06cc\u06af\u0631 \u0634\u0627\u0645\u0644 HTTP\u060c <strong>gRPC<\/strong>\u060c \u06a9\u0627\u0631\u06af\u0632\u0627\u0631\u0627\u0646 \u067e\u06cc\u0627\u0645 \u0648 \u063a\u06cc\u0631\u0647<\/p>\n<p>\u062f\u0631 \u0627\u06cc\u0646 \u0645\u0642\u0627\u0644\u0647\u060c \u0628\u0631\u0631\u0633\u06cc \u062e\u0648\u0627\u0647\u06cc\u0645 \u06a9\u0631\u062f \u06a9\u0647 gRPC \u0686\u06cc\u0633\u062a \u0648 \u0686\u06af\u0648\u0646\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646 \u0628\u0627 \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 gRPC\u060c MongoDB \u0648 Rust \u0634\u0631\u0648\u0639 \u0628\u0647 \u06a9\u0627\u0631 \u06a9\u0631\u062f.<\/p>\n<div id=\"ez-toc-container\" class=\"ez-toc-v2_0_84 counter-hierarchy ez-toc-counter-rtl ez-toc-grey ez-toc-container-direction\">\n<div class=\"ez-toc-title-container\">\n<p class=\"ez-toc-title\" style=\"cursor:inherit\">\u0641\u0647\u0631\u0633\u062a \u0645\u0637\u0627\u0644\u0628<\/p>\n<span class=\"ez-toc-title-toggle\"><a href=\"#\" class=\"ez-toc-pull-right ez-toc-btn ez-toc-btn-xs ez-toc-btn-default ez-toc-toggle\" aria-label=\"Toggle Table of Content\"><span class=\"ez-toc-js-icon-con\"><span class=\"\"><span class=\"eztoc-hide\" style=\"display:none;\">Toggle<\/span><span class=\"ez-toc-icon-toggle-span\"><svg style=\"fill: #999;color:#999\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" class=\"list-377408\" width=\"20px\" height=\"20px\" viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M6 6H4v2h2V6zm14 0H8v2h12V6zM4 11h2v2H4v-2zm16 0H8v2h12v-2zM4 16h2v2H4v-2zm16 0H8v2h12v-2z\" fill=\"currentColor\"><\/path><\/svg><svg style=\"fill: #999;color:#999\" class=\"arrow-unsorted-368013\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"10px\" height=\"10px\" viewBox=\"0 0 24 24\" version=\"1.2\" baseProfile=\"tiny\"><path d=\"M18.2 9.3l-6.2-6.3-6.2 6.3c-.2.2-.3.4-.3.7s.1.5.3.7c.2.2.4.3.7.3h11c.3 0 .5-.1.7-.3.2-.2.3-.5.3-.7s-.1-.5-.3-.7zM5.8 14.7l6.2 6.3 6.2-6.3c.2-.2.3-.5.3-.7s-.1-.5-.3-.7c-.2-.2-.4-.3-.7-.3h-11c-.3 0-.5.1-.7.3-.2.2-.3.5-.3.7s.1.5.3.7z\"\/><\/svg><\/span><\/span><\/span><\/a><\/span><\/div>\n<nav><ul class='ez-toc-list ez-toc-list-level-1 ' ><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-1\" href=\"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/#gRPC_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\" >gRPC \u0686\u06cc\u0633\u062a\u061f<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-2\" href=\"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/#%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7\" >\u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-3\" href=\"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/#%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D9%88_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7\" >\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 \u0648 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-4\" href=\"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/#%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D8%A8%D8%A7%D9%81%D8%B1_%D9%88_%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84_%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1\" >\u062a\u0639\u0631\u06cc\u0641 \u0628\u0627\u0641\u0631 \u0648 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-5\" href=\"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/#%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%DA%A9%D8%AF_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D8%B4%D8%AF%D9%87_%D8%A7%D8%B2_gRPC_%D8%AF%D8%B1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%85%D8%A7\" >\u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062f \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0627\u0632 gRPC \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-6\" href=\"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/#%D8%AA%D8%B3%D8%AA_%D8%A8%D8%A7_%D9%BE%D8%B3%D8%AA%DA%86%DB%8C\" >\u062a\u0633\u062a \u0628\u0627 \u067e\u0633\u062a\u0686\u06cc<\/a><\/li><li class='ez-toc-page-1 ez-toc-heading-level-2'><a class=\"ez-toc-link ez-toc-heading-7\" href=\"https:\/\/nabfollower.com\/blog\/getting-started-with-grpc-in-rust-39nm\/#%D9%86%D8%AA%DB%8C%D8%AC%D9%87\" >\u0646\u062a\u06cc\u062c\u0647<\/a><\/li><\/ul><\/nav><\/div>\n<h2><span class=\"ez-toc-section\" id=\"gRPC_%DA%86%DB%8C%D8%B3%D8%AA%D8%9F\"><\/span>\n<p>  gRPC \u0686\u06cc\u0633\u062a\u061f<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>gRPC \u06cc\u06a9 \u0686\u0627\u0631\u0686\u0648\u0628 \u0627\u0631\u062a\u0628\u0627\u0637\u06cc \u0645\u062f\u0631\u0646 \u0627\u0633\u062a \u06a9\u0647 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u062f\u0631 \u0647\u0631 \u0645\u062d\u06cc\u0637\u06cc \u0627\u062c\u0631\u0627 \u0634\u0648\u062f \u0648 \u0628\u0647 \u0627\u062a\u0635\u0627\u0644 \u0645\u0648\u062b\u0631 \u062e\u062f\u0645\u0627\u062a \u06a9\u0645\u06a9 \u0645\u06cc \u06a9\u0646\u062f.  \u062f\u0631 \u0633\u0627\u0644 2015 \u0645\u0639\u0631\u0641\u06cc \u0634\u062f \u0648 \u062a\u0648\u0633\u0637 \u067e\u0644\u062a\u0641\u0631\u0645 \u0645\u062d\u0627\u0633\u0628\u0627\u062a \u0628\u0648\u0645\u06cc \u0627\u0628\u0631\u06cc (CNCF) \u0627\u062f\u0627\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f.  \u0641\u0631\u0627\u062a\u0631 \u0627\u0632 \u0627\u062a\u0635\u0627\u0644 \u0645\u0648\u062b\u0631 \u062e\u062f\u0645\u0627\u062a \u062f\u0631 \u06cc\u06a9 \u0633\u06cc\u0633\u062a\u0645 \u062a\u0648\u0632\u06cc\u0639 \u0634\u062f\u0647\u060c \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u062a\u0644\u0641\u0646 \u0647\u0645\u0631\u0627\u0647\u060c \u062c\u0644\u0648 \u0628\u0647 \u0628\u0627\u0637\u0646 \u0648 \u063a\u06cc\u0631\u0647\u060c \u0627\u0632 \u0628\u0631\u0631\u0633\u06cc \u0633\u0644\u0627\u0645\u062a\u060c \u062a\u0639\u0627\u062f\u0644 \u0628\u0627\u0631\u060c \u0631\u062f\u06cc\u0627\u0628\u06cc \u0648 \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p>gRPC \u062f\u06cc\u062f\u06af\u0627\u0647 \u062c\u062f\u06cc\u062f\u06cc \u0631\u0627 \u0628\u0647 \u062a\u0648\u0633\u0639\u0647 \u062f\u0647\u0646\u062f\u06af\u0627\u0646\u06cc \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0645\u062a\u0648\u0633\u0637 \u200b\u200b\u062a\u0627 \u067e\u06cc\u0686\u06cc\u062f\u0647 \u0645\u06cc \u0633\u0627\u0632\u0646\u062f\u060c \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f\u060c \u0632\u06cc\u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u062f \u067e\u06cc\u0648\u0646\u062f\u0647\u0627\u06cc \u0645\u0634\u062a\u0631\u06cc \u0648 \u0633\u0631\u0648\u0631 \u0631\u0627 \u0628\u0631\u0627\u06cc \u0686\u0646\u062f\u06cc\u0646 \u0632\u0628\u0627\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062f.  \u062f\u0631 \u0632\u06cc\u0631 \u0628\u0647 \u0628\u0631\u062e\u06cc \u0627\u0632 \u0645\u0632\u0627\u06cc\u0627\u06cc \u0622\u0646 \u0627\u0634\u0627\u0631\u0647 \u0645\u06cc \u0634\u0648\u062f:<\/p>\n<p><strong>\u062a\u0639\u0631\u06cc\u0641 \u062e\u062f\u0645\u0627\u062a<\/strong><\/p>\n<p>gRPC \u0627\u0632 Protocol Buffers \u0628\u0647 \u200b\u200b\u0639\u0646\u0648\u0627\u0646 \u0632\u0628\u0627\u0646 \u062a\u0648\u0635\u06cc\u0641 \u0631\u0627\u0628\u0637 \u062e\u0648\u062f\u060c \u0645\u0634\u0627\u0628\u0647 JSON \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0645\u06cc \u06a9\u0646\u062f \u0648 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc\u06cc \u0645\u0627\u0646\u0646\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u060c \u0644\u063a\u0648\u060c \u0645\u0647\u0644\u062a \u0632\u0645\u0627\u0646\u06cc \u0648 \u063a\u06cc\u0631\u0647 \u0631\u0627 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p><strong>\u0633\u0628\u06a9 \u0648 \u06a9\u0627\u0631\u0622\u0645\u062f<\/strong><\/p>\n<p>\u062a\u0639\u0627\u0631\u06cc\u0641 gRPC 30 \u062f\u0631\u0635\u062f \u06a9\u0648\u0686\u06a9\u062a\u0631 \u0627\u0632 \u062a\u0639\u0627\u0631\u06cc\u0641 JSON \u0647\u0633\u062a\u0646\u062f \u0648 5 \u062a\u0627 7 \u0628\u0631\u0627\u0628\u0631 \u0633\u0631\u06cc\u0639\u062a\u0631 \u0627\u0632 REST API \u0633\u0646\u062a\u06cc \u0647\u0633\u062a\u0646\u062f.<\/p>\n<p><strong>\u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0627\u0632 \u067e\u0644\u062a\u0641\u0631\u0645 \u0647\u0627\u06cc \u0645\u062a\u0639\u062f\u062f<\/strong><\/p>\n<p>gRPC \u0632\u0628\u0627\u0646 \u0622\u06af\u0646\u0648\u0633\u062a\u06cc\u06a9 \u0627\u0633\u062a \u0648 \u062a\u0648\u0644\u06cc\u062f \u06a9\u062f \u062e\u0648\u062f\u06a9\u0627\u0631 \u0628\u0631\u0627\u06cc \u0632\u0628\u0627\u0646\u200c\u0647\u0627\u06cc \u067e\u0634\u062a\u06cc\u0628\u0627\u0646\u06cc \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 \u06a9\u0644\u0627\u06cc\u0646\u062a \u0648 \u0633\u0631\u0648\u0631 \u062f\u0627\u0631\u062f.<\/p>\n<p><strong>\u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631<\/strong><\/p>\n<p>\u0627\u0632 \u0645\u062d\u06cc\u0637 \u062a\u0648\u0633\u0639\u0647\u200c\u062f\u0647\u0646\u062f\u0647 \u062a\u0627 \u062a\u0648\u0644\u06cc\u062f\u060c gRPC \u0628\u0631\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633 \u062f\u0631\u062e\u0648\u0627\u0633\u062a \u0645\u06cc\u0644\u06cc\u0648\u0646\u200c\u0647\u0627 \u062b\u0627\u0646\u06cc\u0647 \u0637\u0631\u0627\u062d\u06cc \u0634\u062f\u0647 \u0627\u0633\u062a.<\/p>\n<p>\u0627\u06a9\u0646\u0648\u0646 \u06a9\u0647 \u0627\u0647\u0645\u06cc\u062a gRPC \u062f\u0631 \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0631\u0627 \u062f\u0631\u06a9 \u06a9\u0631\u062f\u06cc\u0645\u060c \u0628\u06cc\u0627\u06cc\u06cc\u062f \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 gRPC\u060c MongoDB \u0648 Rust \u0628\u0633\u0627\u0632\u06cc\u0645.  \u06a9\u062f \u0645\u0646\u0628\u0639 \u067e\u0631\u0648\u0698\u0647 \u0631\u0627 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u062f \u062f\u0631 \u0627\u06cc\u0646\u062c\u0627 \u0628\u06cc\u0627\u0628\u06cc\u062f.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%BE%DB%8C%D8%B4_%D9%86%DB%8C%D8%A7%D8%B2%D9%87%D8%A7\"><\/span>\n<p>  \u067e\u06cc\u0634 \u0646\u06cc\u0627\u0632\u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u062f\u0631\u06a9 \u06a9\u0627\u0645\u0644 \u0645\u0641\u0627\u0647\u06cc\u0645 \u0627\u0631\u0627\u0626\u0647 \u0634\u062f\u0647 \u062f\u0631 \u0627\u06cc\u0646 \u0622\u0645\u0648\u0632\u0634\u060c \u0645\u0648\u0627\u0631\u062f \u0632\u06cc\u0631 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0627\u0633\u062a:<\/p>\n<ul>\n<li>    \u062f\u0631\u06a9 \u0627\u0648\u0644\u06cc\u0647 \u0627\u0632 Rust<\/li>\n<li>    \u062f\u0631\u06a9 \u0627\u0648\u0644\u06cc\u0647 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0628\u0627\u0641\u0631<\/li>\n<li>    \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644\u0631 Protocol Buffer \u0646\u0635\u0628 \u0634\u062f\u0647 \u0627\u0633\u062a<\/li>\n<li>    \u06cc\u06a9 \u062d\u0633\u0627\u0628 MongoDB \u0628\u0631\u0627\u06cc \u0645\u06cc\u0632\u0628\u0627\u0646\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647. <strong>\u062b\u0628\u062a \u0646\u0627\u0645<\/strong> <strong>\u06a9\u0627\u0645\u0644\u0627 \u0631\u0627\u06cc\u06af\u0627\u0646 \u0627\u0633\u062a<\/strong>.<\/li>\n<li>    \u067e\u0633\u062a\u0686\u06cc \u06cc\u0627 \u0647\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0622\u0632\u0645\u0627\u06cc\u0634\u06cc gRPC<\/li>\n<\/ul>\n<h2><span class=\"ez-toc-section\" id=\"%D8%B1%D8%A7%D9%87_%D8%A7%D9%86%D8%AF%D8%A7%D8%B2%DB%8C_%D9%BE%D8%B1%D9%88%DA%98%D9%87_%D9%88_%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C_%D9%87%D8%A7\"><\/span>\n<p>  \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u067e\u0631\u0648\u0698\u0647 \u0648 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0628\u0627\u06cc\u062f \u0628\u0647 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0645\u0648\u0631\u062f \u0646\u0638\u0631 \u0631\u0641\u062a\u0647 \u0648 \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u0631\u0627 \u062f\u0631 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u062e\u0648\u062f \u0627\u062c\u0631\u0627 \u06a9\u0646\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>cargo new grpc_rust <span class=\"o\">&amp;&amp;<\/span> <span class=\"nb\">cd <\/span>grpc_rust\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0627\u06cc\u0646 \u062f\u0633\u062a\u0648\u0631 \u06cc\u06a9 \u067e\u0631\u0648\u0698\u0647 Rust \u0628\u0647 \u0646\u0627\u0645 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f <code>grpc_rust<\/code> \u0648 \u0648\u0627\u0631\u062f \u0641\u0647\u0631\u0633\u062a \u067e\u0631\u0648\u0698\u0647 \u0645\u06cc \u0634\u0648\u062f.<\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u0628\u0639\u062f\u060c \u0648\u0627\u0628\u0633\u062a\u06af\u06cc\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0628\u0627 \u0627\u0635\u0644\u0627\u062d \u06a9\u0631\u062f\u0646 \u0646\u0635\u0628 \u0645\u06cc\u200c\u06a9\u0646\u06cc\u0645 <code>[dependencies]<\/code> \u0628\u062e\u0634 \u0627\u0632 <code>Cargo.toml<\/code> \u0641\u0627\u06cc\u0644 \u0645\u0637\u0627\u0628\u0642 \u0634\u06a9\u0644 \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight toml\"><code><span class=\"err\">\/\/other<\/span> <span class=\"err\">code<\/span> <span class=\"err\">section<\/span> <span class=\"err\">goes<\/span> <span class=\"err\">here<\/span>\n\n<span class=\"nn\">[dependencies]<\/span>\n<span class=\"nn\">tokio<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span><span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"1\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"p\">[<\/span><span class=\"s\">\"macros\"<\/span><span class=\"p\">,<\/span> <span class=\"s\">\"rt-multi-thread\"<\/span><span class=\"p\">]}<\/span>\n<span class=\"nn\">serde<\/span> <span class=\"o\">=<\/span> <span class=\"p\">{<\/span><span class=\"py\">versiom<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"1\"<\/span><span class=\"p\">,<\/span> <span class=\"py\">features<\/span> <span class=\"p\">=<\/span> <span class=\"nn\">[\"derive\"]<\/span><span class=\"p\">}<\/span>\n<span class=\"py\">dotenv<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.15.0\"<\/span>\n<span class=\"py\">tonic<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.9.2\"<\/span>\n<span class=\"py\">prost<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.11.9\"<\/span>\n<span class=\"py\">futures<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.3\"<\/span>\n\n<span class=\"nn\">[dependencies.mongodb]<\/span>\n<span class=\"py\">version<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"2.2.0\"<\/span>\n\n<span class=\"nn\">[build-dependencies]<\/span>\n<span class=\"py\">tonic-build<\/span> <span class=\"p\">=<\/span> <span class=\"s\">\"0.9.2\"<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><code>tokio = {version = \"1\", features = [\"macros\", \"rt-multi-thread\"]}<\/code>  \u06cc\u06a9 \u0632\u0645\u0627\u0646 \u0627\u062c\u0631\u0627 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0631\u0627 \u062f\u0631 Rust \u0641\u0639\u0627\u0644 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p><code>serde = {versiom = \"1\", features = [\"derive\"]}<\/code>  \u0686\u0627\u0631\u0686\u0648\u0628\u06cc \u0628\u0631\u0627\u06cc \u0633\u0631\u06cc\u0627\u0644 \u0633\u0627\u0632\u06cc \u0648 \u0633\u0631\u06cc\u0627\u0644 \u0632\u062f\u0627\u06cc\u06cc \u0627\u0632 \u0633\u0627\u062e\u062a\u0627\u0631\u0647\u0627\u06cc \u062f\u0627\u062f\u0647 Rust \u0627\u0633\u062a.<\/p>\n<p><code>dotenv = \"0.15.0\"<\/code>  \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0645\u062f\u06cc\u0631\u06cc\u062a \u0645\u062a\u063a\u06cc\u0631\u0647\u0627\u06cc \u0645\u062d\u06cc\u0637\u06cc \u0627\u0633\u062a.<\/p>\n<p><code>tonic = \"0.9.2\"<\/code>  \u0627\u062c\u0631\u0627\u06cc Rust \u0627\u0632 gRPC \u0627\u0633\u062a.<\/p>\n<p><code>prost = \"0.11.9\"<\/code>  \u06cc\u06a9 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc Protocol Buffers \u062f\u0631 Rust \u0627\u0633\u062a \u0648 \u06a9\u062f Rust \u0633\u0627\u062f\u0647 \u0648 \u0627\u0635\u0637\u0644\u0627\u062d\u06cc \u0631\u0627 \u0627\u0632 \u0622\u0646 \u062a\u0648\u0644\u06cc\u062f \u0645\u06cc \u06a9\u0646\u062f <code>proto2<\/code> \u0648 <code>proto3<\/code> \u0641\u0627\u06cc\u0644 \u0647\u0627.<\/p>\n<p><code>futures = \"0.3\"<\/code>  \u06cc\u06a9 \u06a9\u062a\u0627\u0628\u062e\u0627\u0646\u0647 \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0646\u0627\u0647\u0645\u0632\u0645\u0627\u0646 \u0628\u0627 \u062f\u0631\u0627\u06cc\u0648\u0631 MongoDB \u0627\u0633\u062a<\/p>\n<p><code>[dependencies.mongodb]<\/code>  \u06cc\u06a9 \u062f\u0631\u0627\u06cc\u0648\u0631 \u0628\u0631\u0627\u06cc \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 MongoDB \u0627\u0633\u062a.  \u0647\u0645\u0686\u0646\u06cc\u0646 \u0646\u0633\u062e\u0647 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0648 \u0646\u0648\u0639 \u0648\u06cc\u0698\u06af\u06cc (Asynchronous API) \u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f.<\/p>\n<p><code>[build-dependencies]<\/code>  \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f <code>tonic-build = \"0.9.2\"<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0648\u0627\u0628\u0633\u062a\u06af\u06cc  \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u06cc \u06a9\u0646\u062f <code>.proto<\/code> \u0641\u0627\u06cc\u0644 \u0647\u0627 \u0628\u0647 \u06a9\u062f Rust.<\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B9%D8%B1%DB%8C%D9%81_%D8%A8%D8%A7%D9%81%D8%B1_%D9%88_%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84_%D9%BE%D8%B1%D9%88%D8%AA%DA%A9%D9%84_%D9%85%D8%AF%DB%8C%D8%B1%DB%8C%D8%AA_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1\"><\/span>\n<p>  \u062a\u0639\u0631\u06cc\u0641 \u0628\u0627\u0641\u0631 \u0648 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u067e\u0631\u0648\u062a\u06a9\u0644 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0631\u0627\u06cc \u0634\u0631\u0648\u0639\u060c \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0628\u0627\u0641\u0631 \u067e\u0631\u0648\u062a\u06a9\u0644 \u062a\u0639\u0631\u06cc\u0641 \u06a9\u0646\u06cc\u0645 \u062a\u0627 \u062a\u0645\u0627\u0645 \u0639\u0645\u0644\u06cc\u0627\u062a \u0648 \u067e\u0627\u0633\u062e\u200c\u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0633\u0631\u0648\u06cc\u0633 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0631\u0627 \u0646\u0634\u0627\u0646 \u062f\u0647\u062f.  \u0628\u0631\u0627\u06cc \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f a \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>proto<\/code> \u067e\u0648\u0634\u0647 \u062f\u0631 \u067e\u0648\u0634\u0647 \u0631\u06cc\u0634\u0647\u060c \u0648 \u062f\u0631 \u0627\u06cc\u0646 \u067e\u0648\u0634\u0647\u060c a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u062f <code>user.proto<\/code> \u0641\u0627\u06cc\u0644 \u0648 \u0642\u0637\u0639\u0647 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight protobuf\"><code><span class=\"na\">syntax<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"proto3\"<\/span><span class=\"p\">;<\/span>\n<span class=\"kn\">package<\/span> <span class=\"nn\">user<\/span><span class=\"p\">;<\/span>\n\n<span class=\"kd\">service<\/span> <span class=\"n\">UserService<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">rpc<\/span> <span class=\"n\">GetUser<\/span> <span class=\"p\">(<\/span><span class=\"n\">UserRequest<\/span><span class=\"p\">)<\/span> <span class=\"k\">returns<\/span> <span class=\"p\">(<\/span><span class=\"n\">UserResponse<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">rpc<\/span> <span class=\"n\">CreateUser<\/span> <span class=\"p\">(<\/span><span class=\"n\">CreateUserRequest<\/span><span class=\"p\">)<\/span> <span class=\"k\">returns<\/span> <span class=\"p\">(<\/span><span class=\"n\">CreateUserResponse<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">rpc<\/span> <span class=\"n\">UpdateUser<\/span> <span class=\"p\">(<\/span><span class=\"n\">UpdateUserRequest<\/span><span class=\"p\">)<\/span> <span class=\"k\">returns<\/span> <span class=\"p\">(<\/span><span class=\"n\">UpdateUserResponse<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">rpc<\/span> <span class=\"n\">DeleteUser<\/span> <span class=\"p\">(<\/span><span class=\"n\">DeleteUserRequest<\/span><span class=\"p\">)<\/span> <span class=\"k\">returns<\/span> <span class=\"p\">(<\/span><span class=\"n\">DeleteUserResponse<\/span><span class=\"p\">);<\/span>\n    <span class=\"k\">rpc<\/span> <span class=\"n\">GetAllUsers<\/span> <span class=\"p\">(<\/span><span class=\"n\">Empty<\/span><span class=\"p\">)<\/span> <span class=\"k\">returns<\/span> <span class=\"p\">(<\/span><span class=\"n\">GetAllUsersResponse<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">UserRequest<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">id<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">UserResponse<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">id<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">name<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">location<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3<\/span><span class=\"p\">;<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">title<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">4<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">CreateUserRequest<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">name<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">location<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3<\/span><span class=\"p\">;<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">title<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">4<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">CreateUserResponse<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">data<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">UpdateUserRequest<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">_id<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">name<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">2<\/span><span class=\"p\">;<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">location<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">3<\/span><span class=\"p\">;<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">title<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">4<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">UpdateUserResponse<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">data<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">DeleteUserRequest<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">id<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">DeleteUserResponse<\/span> <span class=\"p\">{<\/span>\n    <span class=\"kt\">string<\/span> <span class=\"na\">data<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">Empty<\/span> <span class=\"p\">{}<\/span>\n\n<span class=\"kd\">message<\/span> <span class=\"nc\">GetAllUsersResponse<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">repeated<\/span> <span class=\"n\">UserResponse<\/span> <span class=\"na\">users<\/span> <span class=\"o\">=<\/span> <span class=\"mi\">1<\/span><span class=\"p\">;<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0642\u0637\u0639\u0647 \u0628\u0627\u0644\u0627 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>    \u06a9\u0627\u0631\u0628\u0631\u062f \u0631\u0627 \u0645\u0634\u062e\u0635 \u0645\u06cc \u06a9\u0646\u062f <code>proto3<\/code> \u0646\u062d\u0648<\/li>\n<li>    \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc \u06a9\u0646\u062f <code>user<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u0646\u0627\u0645 \u0628\u0633\u062a\u0647<\/li>\n<li>    a \u0631\u0627 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f <code>service<\/code> \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f\u060c \u062e\u0648\u0627\u0646\u062f\u0646\u060c \u0648\u06cc\u0631\u0627\u06cc\u0634 \u0648 \u062d\u0630\u0641 (CRUD) \u06cc\u06a9 \u06a9\u0627\u0631\u0628\u0631 \u0648 \u067e\u0627\u0633\u062e \u0647\u0627\u06cc \u0645\u0631\u0628\u0648\u0637 \u0628\u0647 \u0622\u0646\u0647\u0627 \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 <code>message<\/code>\u0633<\/li>\n<\/ul>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u062f\u0648\u0645\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u0641\u0627\u06cc\u0644 \u0633\u0627\u062e\u062a \u06a9\u0647 \u062f\u0633\u062a\u0648\u0631 \u0645\u06cc \u062f\u0647\u062f \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>tonic-build = \"0.9.2\"<\/code> \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0628\u0647 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u0645\u0627 <code>user.proto<\/code> \u062f\u0631 \u06cc\u06a9 \u06a9\u062f Rust \u0641\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u062f.  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u06cc\u062f a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>build.rs<\/code> \u0641\u0627\u06cc\u0644 \u0631\u0627 \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0631\u06cc\u0634\u0647 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f \u0648 \u0642\u0637\u0639\u0647 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight rust\"><code><span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"p\">(),<\/span> <span class=\"nb\">Box<\/span><span class=\"o\">&lt;<\/span><span class=\"k\">dyn<\/span> <span class=\"nn\">std<\/span><span class=\"p\">::<\/span><span class=\"nn\">error<\/span><span class=\"p\">::<\/span><span class=\"n\">Error<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nn\">tonic_build<\/span><span class=\"p\">::<\/span><span class=\"nf\">compile_protos<\/span><span class=\"p\">(<\/span><span class=\"s\">\"proto\/user.proto\"<\/span><span class=\"p\">)<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\n    <span class=\"nf\">Ok<\/span><span class=\"p\">(())<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u0622\u0646 \u0631\u0627 \u06a9\u0627\u0645\u067e\u0627\u06cc\u0644 \u06a9\u0646\u06cc\u0645 <code>user.proto<\/code> \u0641\u0627\u06cc\u0644 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>build.rs<\/code> \u062f\u0633\u062a\u0648\u0631\u0627\u0644\u0639\u0645\u0644\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627\u064b \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u062f\u0631 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u062e\u0648\u062f \u0645\u0634\u062e\u0635 \u06a9\u0631\u062f\u06cc\u0645:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>cargo build\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%A8%D8%A7_%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87_%D8%A7%D8%B2_%DA%A9%D8%AF_%D8%AA%D9%88%D9%84%DB%8C%D8%AF_%D8%B4%D8%AF%D9%87_%D8%A7%D8%B2_gRPC_%D8%AF%D8%B1_%D8%A8%D8%B1%D9%86%D8%A7%D9%85%D9%87_%D9%85%D8%A7\"><\/span>\n<p>  \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06a9\u062f \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u0627\u0632 gRPC \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u0627\u0646\u062c\u0627\u0645 \u0641\u0631\u0622\u06cc\u0646\u062f \u0633\u0627\u062e\u062a\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u06a9\u062f \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062f\u0631 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.<\/p>\n<p><strong>\u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u0648 \u06cc\u06a9\u067e\u0627\u0631\u0686\u0647 \u0633\u0627\u0632\u06cc \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647<\/strong><\/p>\n<p>\u0627\u0628\u062a\u062f\u0627 \u0628\u0627\u06cc\u062f \u06cc\u06a9 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0648 \u0645\u062c\u0645\u0648\u0639\u0647 \u0627\u06cc \u0631\u0627 \u062f\u0631 MongoDB \u0631\u0627\u0647 \u0627\u0646\u062f\u0627\u0632\u06cc \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u062f\u0631 \u0632\u06cc\u0631 \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0647 \u0634\u062f\u0647 \u0627\u0633\u062a:<\/p>\n<p><\/p>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646 \u0628\u0627\u06cc\u062f \u0631\u0634\u062a\u0647 \u0627\u062a\u0635\u0627\u0644 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u06a9\u0644\u06cc\u06a9 \u06a9\u0631\u062f\u0646 \u0628\u0631 \u0631\u0648\u06cc \u0622\u0646 \u062f\u0631\u06cc\u0627\u0641\u062a \u06a9\u0646\u06cc\u0645 <strong>\u0627\u062a\u0635\u0627\u0644<\/strong> \u062f\u06a9\u0645\u0647 \u0648 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0631\u0627\u06cc\u0648\u0631 \u0628\u0647 <code>Rust<\/code>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/05\/1684856551_60_\u0634\u0631\u0648\u0639-\u06a9\u0627\u0631-\u0628\u0627-gRPC-\u062f\u0631-Rust.png\" alt=\"\" loading=\"lazy\" width=\"800\" height=\"362\" title=\"\"><\/p>\n<p>\u062f\u0631 \u0645\u0631\u062d\u0644\u0647 \u062f\u0648\u0645\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u0631\u0634\u062a\u0647 \u0627\u062a\u0635\u0627\u0644 \u06a9\u067e\u06cc \u0634\u062f\u0647 \u0631\u0627 \u0628\u0627 \u0631\u0645\u0632 \u0639\u0628\u0648\u0631 \u06a9\u0627\u0631\u0628\u0631\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u0647 \u0628\u0648\u062f\u06cc\u0645 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u0645 \u0648 \u0646\u0627\u0645 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0647\u06cc\u0645.  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u06cc\u062f a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>.env<\/code> \u0641\u0627\u06cc\u0644 \u0631\u0627 \u062f\u0631 \u062f\u0627\u06cc\u0631\u06a9\u062a\u0648\u0631\u06cc \u0631\u06cc\u0634\u0647 \u0642\u0631\u0627\u0631 \u062f\u0647\u06cc\u062f \u0648 \u0642\u0637\u0639\u0647 \u06a9\u067e\u06cc \u0634\u062f\u0647 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">MONGOURI<\/span><span class=\"o\">=<\/span>mongodb+srv:\/\/&lt;YOUR USERNAME HERE&gt;:&lt;YOUR PASSWORD HERE&gt;@cluster0.e5akf.mongodb.net\/&lt;DATABASE NAME&gt;?retryWrites<span class=\"o\">=<\/span><span class=\"nb\">true<\/span>&amp;w<span class=\"o\">=<\/span>majority\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0646\u0645\u0648\u0646\u0647 \u0627\u06cc \u0627\u0632 \u06cc\u06a9 \u0631\u0634\u062a\u0647 \u0627\u062a\u0635\u0627\u0644 \u0628\u0647 \u062f\u0631\u0633\u062a\u06cc \u067e\u0631 \u0634\u062f\u0647 \u062f\u0631 \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code><span class=\"nv\">MONGOURI<\/span><span class=\"o\">=<\/span>mongodb+srv:\/\/malomz:malomzPassword@cluster0.e5akf.mongodb.net\/rustDB?retryWrites<span class=\"o\">=<\/span><span class=\"nb\">true<\/span>&amp;w<span class=\"o\">=<\/span>majority\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u062f\u0631 \u0646\u0647\u0627\u06cc\u062a\u060c \u0645\u0627 \u0628\u0627\u06cc\u062f \u0628\u0647 \u0645\u0633\u06cc\u0631 \u0628\u0631\u0648\u06cc\u062f <code>src<\/code> \u067e\u0648\u0634\u0647\u060c \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 <code>mongo_connection.rs<\/code> \u0641\u0627\u06cc\u0644 \u0631\u0627 \u0628\u0631\u0627\u06cc \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0645\u0646\u0637\u0642 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0645\u0627 \u0648 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u0646 \u0642\u0637\u0639\u0647 \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight rust\"><code><span class=\"k\">use<\/span> <span class=\"nn\">std<\/span><span class=\"p\">::{<\/span><span class=\"n\">env<\/span><span class=\"p\">,<\/span> <span class=\"nn\">io<\/span><span class=\"p\">::<\/span><span class=\"n\">Error<\/span><span class=\"p\">};<\/span>\n\n<span class=\"k\">use<\/span> <span class=\"nn\">dotenv<\/span><span class=\"p\">::<\/span><span class=\"n\">dotenv<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">futures<\/span><span class=\"p\">::<\/span><span class=\"n\">TryStreamExt<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">mongodb<\/span><span class=\"p\">::<\/span><span class=\"nn\">bson<\/span><span class=\"p\">::<\/span><span class=\"n\">doc<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">mongodb<\/span><span class=\"p\">::<\/span><span class=\"nn\">bson<\/span><span class=\"p\">::<\/span><span class=\"nn\">oid<\/span><span class=\"p\">::<\/span><span class=\"n\">ObjectId<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">mongodb<\/span><span class=\"p\">::<\/span><span class=\"nn\">results<\/span><span class=\"p\">::{<\/span><span class=\"n\">DeleteResult<\/span><span class=\"p\">,<\/span> <span class=\"n\">InsertOneResult<\/span><span class=\"p\">,<\/span> <span class=\"n\">UpdateResult<\/span><span class=\"p\">};<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">mongodb<\/span><span class=\"p\">::{<\/span><span class=\"n\">Client<\/span><span class=\"p\">,<\/span> <span class=\"n\">Collection<\/span><span class=\"p\">};<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">serde<\/span><span class=\"p\">::{<\/span><span class=\"n\">Deserialize<\/span><span class=\"p\">,<\/span> <span class=\"n\">Serialize<\/span><span class=\"p\">};<\/span>\n\n<span class=\"nd\">#[derive(Debug,<\/span> <span class=\"nd\">Serialize,<\/span> <span class=\"nd\">Deserialize)]<\/span>\n<span class=\"k\">pub<\/span> <span class=\"k\">struct<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nd\">#[serde(rename<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"_id\"<\/span><span class=\"nd\">,<\/span> <span class=\"nd\">skip_serializing_if<\/span> <span class=\"nd\">=<\/span> <span class=\"s\">\"Option::is_none\"<\/span><span class=\"nd\">)]<\/span>\n    <span class=\"k\">pub<\/span> <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Option<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">ObjectId<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n    <span class=\"k\">pub<\/span> <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span>\n    <span class=\"k\">pub<\/span> <span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span>\n    <span class=\"k\">pub<\/span> <span class=\"n\">title<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">pub<\/span> <span class=\"k\">struct<\/span> <span class=\"n\">DBMongo<\/span> <span class=\"p\">{<\/span>\n    <span class=\"n\">col<\/span><span class=\"p\">:<\/span> <span class=\"n\">Collection<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"k\">impl<\/span> <span class=\"n\">DBMongo<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">pub<\/span> <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">init<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"k\">Self<\/span> <span class=\"p\">{<\/span>\n        <span class=\"nf\">dotenv<\/span><span class=\"p\">()<\/span><span class=\"nf\">.ok<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">uri<\/span> <span class=\"o\">=<\/span> <span class=\"k\">match<\/span> <span class=\"nn\">env<\/span><span class=\"p\">::<\/span><span class=\"nf\">var<\/span><span class=\"p\">(<\/span><span class=\"s\">\"MONGOURI\"<\/span><span class=\"p\">)<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">v<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"n\">v<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">(),<\/span>\n            <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"n\">_<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error loading env variable\"<\/span><span class=\"p\">),<\/span>\n        <span class=\"p\">};<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">client<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">Client<\/span><span class=\"p\">::<\/span><span class=\"nf\">with_uri_str<\/span><span class=\"p\">(<\/span><span class=\"n\">uri<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">.await<\/span>\n            <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"error connecting to database\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">col<\/span> <span class=\"o\">=<\/span> <span class=\"n\">client<\/span><span class=\"nf\">.database<\/span><span class=\"p\">(<\/span><span class=\"s\">\"rustDB\"<\/span><span class=\"p\">)<\/span><span class=\"nf\">.collection<\/span><span class=\"p\">(<\/span><span class=\"s\">\"User\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"n\">DBMongo<\/span> <span class=\"p\">{<\/span> <span class=\"n\">col<\/span> <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">pub<\/span> <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">create_user<\/span><span class=\"p\">(<\/span><span class=\"n\">new_user<\/span><span class=\"p\">:<\/span> <span class=\"n\">User<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">InsertOneResult<\/span><span class=\"p\">,<\/span> <span class=\"n\">Error<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">init<\/span><span class=\"p\">()<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">new_doc<\/span> <span class=\"o\">=<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">None<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"n\">new_user<\/span><span class=\"py\">.name<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"n\">new_user<\/span><span class=\"py\">.location<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">title<\/span><span class=\"p\">:<\/span> <span class=\"n\">new_user<\/span><span class=\"py\">.title<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">};<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">db<\/span>\n            <span class=\"py\">.col<\/span>\n            <span class=\"nf\">.insert_one<\/span><span class=\"p\">(<\/span><span class=\"n\">new_doc<\/span><span class=\"p\">,<\/span> <span class=\"nb\">None<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">.await<\/span>\n            <span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span>\n            <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error creating user\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">pub<\/span> <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">get_user<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"p\">,<\/span> <span class=\"n\">Error<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">init<\/span><span class=\"p\">()<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">obj_id<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">ObjectId<\/span><span class=\"p\">::<\/span><span class=\"nf\">parse_str<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">)<\/span><span class=\"nf\">.unwrap<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">filter<\/span> <span class=\"o\">=<\/span> <span class=\"nd\">doc!<\/span> <span class=\"p\">{<\/span><span class=\"s\">\"_id\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">obj_id<\/span><span class=\"p\">};<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">user_detail<\/span> <span class=\"o\">=<\/span> <span class=\"n\">db<\/span>\n            <span class=\"py\">.col<\/span>\n            <span class=\"nf\">.find_one<\/span><span class=\"p\">(<\/span><span class=\"n\">filter<\/span><span class=\"p\">,<\/span> <span class=\"nb\">None<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">.await<\/span>\n            <span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span>\n            <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error getting user's detail\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">user_detail<\/span><span class=\"nf\">.unwrap<\/span><span class=\"p\">())<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">pub<\/span> <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">update_user<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">,<\/span> <span class=\"n\">new_user<\/span><span class=\"p\">:<\/span> <span class=\"n\">User<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">UpdateResult<\/span><span class=\"p\">,<\/span> <span class=\"n\">Error<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">init<\/span><span class=\"p\">()<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">obj_id<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">ObjectId<\/span><span class=\"p\">::<\/span><span class=\"nf\">parse_str<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">)<\/span><span class=\"nf\">.unwrap<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">filter<\/span> <span class=\"o\">=<\/span> <span class=\"nd\">doc!<\/span> <span class=\"p\">{<\/span><span class=\"s\">\"_id\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">obj_id<\/span><span class=\"p\">};<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">new_doc<\/span> <span class=\"o\">=<\/span> <span class=\"nd\">doc!<\/span> <span class=\"p\">{<\/span>\n            <span class=\"s\">\"$set\"<\/span><span class=\"p\">:<\/span>\n                <span class=\"p\">{<\/span>\n                    <span class=\"s\">\"id\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">new_user<\/span><span class=\"py\">.id<\/span><span class=\"p\">,<\/span>\n                    <span class=\"s\">\"name\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">new_user<\/span><span class=\"py\">.name<\/span><span class=\"p\">,<\/span>\n                    <span class=\"s\">\"location\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">new_user<\/span><span class=\"py\">.location<\/span><span class=\"p\">,<\/span>\n                    <span class=\"s\">\"title\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">new_user<\/span><span class=\"py\">.title<\/span>\n                <span class=\"p\">},<\/span>\n        <span class=\"p\">};<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">updated_doc<\/span> <span class=\"o\">=<\/span> <span class=\"n\">db<\/span>\n            <span class=\"py\">.col<\/span>\n            <span class=\"nf\">.update_one<\/span><span class=\"p\">(<\/span><span class=\"n\">filter<\/span><span class=\"p\">,<\/span> <span class=\"n\">new_doc<\/span><span class=\"p\">,<\/span> <span class=\"nb\">None<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">.await<\/span>\n            <span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span>\n            <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error updating user\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">updated_doc<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">pub<\/span> <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">delete_user<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">String<\/span><span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">DeleteResult<\/span><span class=\"p\">,<\/span> <span class=\"n\">Error<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">init<\/span><span class=\"p\">()<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">obj_id<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">ObjectId<\/span><span class=\"p\">::<\/span><span class=\"nf\">parse_str<\/span><span class=\"p\">(<\/span><span class=\"n\">id<\/span><span class=\"p\">)<\/span><span class=\"nf\">.unwrap<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">filter<\/span> <span class=\"o\">=<\/span> <span class=\"nd\">doc!<\/span> <span class=\"p\">{<\/span><span class=\"s\">\"_id\"<\/span><span class=\"p\">:<\/span> <span class=\"n\">obj_id<\/span><span class=\"p\">};<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">user_detail<\/span> <span class=\"o\">=<\/span> <span class=\"n\">db<\/span>\n            <span class=\"py\">.col<\/span>\n            <span class=\"nf\">.delete_one<\/span><span class=\"p\">(<\/span><span class=\"n\">filter<\/span><span class=\"p\">,<\/span> <span class=\"nb\">None<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">.await<\/span>\n            <span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span>\n            <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error deleting user\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">user_detail<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">pub<\/span> <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">get_all_users<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"n\">Error<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">init<\/span><span class=\"p\">()<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">cursors<\/span> <span class=\"o\">=<\/span> <span class=\"n\">db<\/span>\n            <span class=\"py\">.col<\/span>\n            <span class=\"nf\">.find<\/span><span class=\"p\">(<\/span><span class=\"nb\">None<\/span><span class=\"p\">,<\/span> <span class=\"nb\">None<\/span><span class=\"p\">)<\/span>\n            <span class=\"k\">.await<\/span>\n            <span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span>\n            <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error getting list of users\"<\/span><span class=\"p\">);<\/span>\n        <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">users<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">User<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">Vec<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">while<\/span> <span class=\"k\">let<\/span> <span class=\"nf\">Some<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span> <span class=\"o\">=<\/span> <span class=\"n\">cursors<\/span>\n            <span class=\"nf\">.try_next<\/span><span class=\"p\">()<\/span>\n            <span class=\"k\">.await<\/span>\n            <span class=\"nf\">.ok<\/span><span class=\"p\">()<\/span>\n            <span class=\"nf\">.expect<\/span><span class=\"p\">(<\/span><span class=\"s\">\"Error mapping through cursor\"<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">{<\/span>\n            <span class=\"n\">users<\/span><span class=\"nf\">.push<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">)<\/span>\n        <span class=\"p\">}<\/span>\n        <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">users<\/span><span class=\"p\">)<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0642\u0637\u0639\u0647 \u0628\u0627\u0644\u0627 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>  <strong>\u062e\u0637: 1 &#8211; 9<\/strong>: \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f<\/li>\n<li>  <strong>\u062e\u0637: 11 &#8211; 18<\/strong>: \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 <code>User<\/code> \u0633\u0627\u062e\u062a\u0627\u0631 \u0628\u0627 \u062e\u0648\u0627\u0635 \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632  \u0645\u0627 \u0647\u0645\u0686\u0646\u06cc\u0646 \u0648\u06cc\u0698\u06af\u06cc \u0647\u0627\u06cc \u0641\u06cc\u0644\u062f \u0631\u0627 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0631\u062f\u06cc\u0645 <code>id<\/code> \u0648\u06cc\u0698\u06af\u06cc \u0631\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u0646\u0627\u0645 \u062f\u0647\u06cc\u062f \u0648 \u062f\u0631 \u0635\u0648\u0631\u062a \u062e\u0627\u0644\u06cc \u0628\u0648\u062f\u0646 \u0641\u06cc\u0644\u062f \u0631\u0627 \u0646\u0627\u062f\u06cc\u062f\u0647 \u0628\u06af\u06cc\u0631\u06cc\u062f.<\/li>\n<li>  <strong>\u062e\u0637: 20 &#8211; 22<\/strong>: \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 <code>DBMongo<\/code> \u0633\u0627\u062e\u062a \u0628\u0627 a <code>col<\/code> \u0632\u0645\u06cc\u0646\u0647 \u062f\u0633\u062a\u0631\u0633\u06cc \u0628\u0647 \u0645\u062c\u0645\u0648\u0639\u0647 MongoDB<\/li>\n<li>  <strong>\u062e\u0637: 24 &#8211; 122<\/strong>: \u06cc\u06a9 \u0628\u0644\u0648\u06a9 \u067e\u06cc\u0627\u062f\u0647 \u0633\u0627\u0632\u06cc \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f \u06a9\u0647 \u0645\u062a\u062f\u0647\u0627\u06cc\u06cc \u0631\u0627 \u0628\u0647 \u0622\u0646 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>MongoRepo<\/code> struct \u0628\u0631\u0627\u06cc \u0645\u0642\u062f\u0627\u0631\u062f\u0647\u06cc \u0627\u0648\u0644\u06cc\u0647 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 \u0639\u0645\u0644\u06cc\u0627\u062a CRUD \u0645\u0631\u0628\u0648\u0637\u0647 \u0622\u0646.<\/li>\n<\/ul>\n<p><strong>\u0627\u062f\u063a\u0627\u0645 \u0645\u0646\u0637\u0642 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647 \u0628\u0627 \u06a9\u062f \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 gRPC<\/strong><\/p>\n<p>\u0628\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0645\u0646\u0637\u0642 \u067e\u0627\u06cc\u06af\u0627\u0647 \u062f\u0627\u062f\u0647\u200c\u0645\u0627\u0646\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0627\u0632 \u0631\u0648\u0634\u200c\u0647\u0627\u06cc\u06cc \u0628\u0631\u0627\u06cc \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u062a\u0631\u0644\u200c\u06a9\u0646\u0646\u062f\u0647\u200c\u0647\u0627\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u06a9\u0646\u06cc\u0645.  \u0628\u0631\u0627\u06cc \u0627\u06cc\u0646 \u06a9\u0627\u0631 \u0628\u0627\u06cc\u062f a \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>service.rs<\/code> \u0641\u0627\u06cc\u0644 \u062f\u0627\u062e\u0644 \u0647\u0645\u0627\u0646 <code>src<\/code> \u067e\u0648\u0634\u0647 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f \u0648 \u0642\u0637\u0639\u0647 \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0636\u0627\u0641\u0647 \u06a9\u0646\u06cc\u062f:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight rust\"><code><span class=\"k\">use<\/span> <span class=\"nn\">mongodb<\/span><span class=\"p\">::<\/span><span class=\"nn\">bson<\/span><span class=\"p\">::<\/span><span class=\"nn\">oid<\/span><span class=\"p\">::<\/span><span class=\"n\">ObjectId<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">tonic<\/span><span class=\"p\">::{<\/span><span class=\"n\">Request<\/span><span class=\"p\">,<\/span> <span class=\"n\">Response<\/span><span class=\"p\">,<\/span> <span class=\"n\">Status<\/span><span class=\"p\">};<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">user<\/span><span class=\"p\">::{<\/span>\n    <span class=\"nn\">user_service_server<\/span><span class=\"p\">::<\/span><span class=\"n\">UserService<\/span><span class=\"p\">,<\/span> <span class=\"n\">CreateUserRequest<\/span><span class=\"p\">,<\/span> <span class=\"n\">CreateUserResponse<\/span><span class=\"p\">,<\/span> <span class=\"n\">DeleteUserRequest<\/span><span class=\"p\">,<\/span>\n    <span class=\"n\">DeleteUserResponse<\/span><span class=\"p\">,<\/span> <span class=\"n\">Empty<\/span><span class=\"p\">,<\/span> <span class=\"n\">GetAllUsersResponse<\/span><span class=\"p\">,<\/span> <span class=\"n\">UpdateUserRequest<\/span><span class=\"p\">,<\/span> <span class=\"n\">UpdateUserResponse<\/span><span class=\"p\">,<\/span>\n<span class=\"p\">};<\/span>\n<span class=\"k\">use<\/span> <span class=\"k\">crate<\/span><span class=\"p\">::<\/span><span class=\"nn\">mongo_connection<\/span><span class=\"p\">::{<\/span><span class=\"k\">self<\/span><span class=\"p\">,<\/span> <span class=\"n\">DBMongo<\/span><span class=\"p\">};<\/span>\n<span class=\"k\">use<\/span> <span class=\"k\">self<\/span><span class=\"p\">::<\/span><span class=\"nn\">user<\/span><span class=\"p\">::{<\/span><span class=\"n\">UserRequest<\/span><span class=\"p\">,<\/span> <span class=\"n\">UserResponse<\/span><span class=\"p\">};<\/span>\n\n<span class=\"k\">pub<\/span> <span class=\"k\">mod<\/span> <span class=\"n\">user<\/span> <span class=\"p\">{<\/span>\n    <span class=\"nn\">tonic<\/span><span class=\"p\">::<\/span><span class=\"nd\">include_proto!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"user\"<\/span><span class=\"p\">);<\/span>\n<span class=\"p\">}<\/span>\n\n<span class=\"nd\">#[derive(Debug,<\/span> <span class=\"nd\">Default)]<\/span>\n<span class=\"k\">pub<\/span> <span class=\"k\">struct<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{}<\/span>\n\n<span class=\"nd\">#[tonic::async_trait]<\/span>\n<span class=\"k\">impl<\/span> <span class=\"n\">UserService<\/span> <span class=\"k\">for<\/span> <span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">create_user<\/span><span class=\"p\">(<\/span>\n        <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">request<\/span><span class=\"p\">:<\/span> <span class=\"n\">Request<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">CreateUserRequest<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Response<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">CreateUserResponse<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"n\">Status<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">req<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request<\/span><span class=\"nf\">.into_inner<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">new_user<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">mongo_connection<\/span><span class=\"p\">::<\/span><span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nb\">None<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"n\">req<\/span><span class=\"py\">.name<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"n\">req<\/span><span class=\"py\">.location<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">title<\/span><span class=\"p\">:<\/span> <span class=\"n\">req<\/span><span class=\"py\">.title<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">};<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">create_user<\/span><span class=\"p\">(<\/span><span class=\"n\">new_user<\/span><span class=\"p\">)<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">match<\/span> <span class=\"n\">db<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">resp<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"p\">{<\/span>\n                <span class=\"k\">let<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">CreateUserResponse<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"n\">data<\/span><span class=\"p\">:<\/span> <span class=\"n\">resp<\/span><span class=\"py\">.inserted_id<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">(),<\/span>\n                <span class=\"p\">};<\/span>\n                <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"nn\">Response<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">))<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"nn\">Status<\/span><span class=\"p\">::<\/span><span class=\"nf\">aborted<\/span><span class=\"p\">(<\/span><span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error<\/span><span class=\"p\">))),<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">get_user<\/span><span class=\"p\">(<\/span>\n        <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">request<\/span><span class=\"p\">:<\/span> <span class=\"n\">Request<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">UserRequest<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Response<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">UserResponse<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"n\">Status<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">req<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request<\/span><span class=\"nf\">.into_inner<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">get_user<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"py\">.id<\/span><span class=\"p\">)<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">match<\/span> <span class=\"n\">db<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">resp<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"p\">{<\/span>\n                <span class=\"k\">let<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">UserResponse<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"n\">resp<\/span><span class=\"py\">.id<\/span><span class=\"nf\">.unwrap<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">(),<\/span>\n                    <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"n\">resp<\/span><span class=\"py\">.name<\/span><span class=\"p\">,<\/span>\n                    <span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"n\">resp<\/span><span class=\"py\">.location<\/span><span class=\"p\">,<\/span>\n                    <span class=\"n\">title<\/span><span class=\"p\">:<\/span> <span class=\"n\">resp<\/span><span class=\"py\">.title<\/span><span class=\"p\">,<\/span>\n                <span class=\"p\">};<\/span>\n                <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"nn\">Response<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">))<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"nn\">Status<\/span><span class=\"p\">::<\/span><span class=\"nf\">aborted<\/span><span class=\"p\">(<\/span><span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error<\/span><span class=\"p\">))),<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">update_user<\/span><span class=\"p\">(<\/span>\n        <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">request<\/span><span class=\"p\">:<\/span> <span class=\"n\">Request<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">UpdateUserRequest<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Response<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">UpdateUserResponse<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"n\">Status<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">req<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request<\/span><span class=\"nf\">.into_inner<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">new_user<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">mongo_connection<\/span><span class=\"p\">::<\/span><span class=\"n\">User<\/span> <span class=\"p\">{<\/span>\n            <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"nf\">Some<\/span><span class=\"p\">(<\/span><span class=\"nn\">ObjectId<\/span><span class=\"p\">::<\/span><span class=\"nf\">parse_str<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"py\">.id<\/span><span class=\"nf\">.clone<\/span><span class=\"p\">())<\/span><span class=\"nf\">.unwrap<\/span><span class=\"p\">()),<\/span>\n            <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"n\">req<\/span><span class=\"py\">.name<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"n\">req<\/span><span class=\"py\">.location<\/span><span class=\"p\">,<\/span>\n            <span class=\"n\">title<\/span><span class=\"p\">:<\/span> <span class=\"n\">req<\/span><span class=\"py\">.title<\/span><span class=\"p\">,<\/span>\n        <span class=\"p\">};<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">update_user<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"py\">.id<\/span><span class=\"nf\">.clone<\/span><span class=\"p\">(),<\/span> <span class=\"n\">new_user<\/span><span class=\"p\">)<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">match<\/span> <span class=\"n\">db<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">_<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"p\">{<\/span>\n                <span class=\"k\">let<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">UpdateUserResponse<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"n\">data<\/span><span class=\"p\">:<\/span> <span class=\"nn\">String<\/span><span class=\"p\">::<\/span><span class=\"nf\">from<\/span><span class=\"p\">(<\/span><span class=\"s\">\"User details updated successfully!\"<\/span><span class=\"p\">),<\/span>\n                <span class=\"p\">};<\/span>\n                <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"nn\">Response<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">))<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"nn\">Status<\/span><span class=\"p\">::<\/span><span class=\"nf\">aborted<\/span><span class=\"p\">(<\/span><span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error<\/span><span class=\"p\">))),<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">delete_user<\/span><span class=\"p\">(<\/span>\n        <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">request<\/span><span class=\"p\">:<\/span> <span class=\"n\">Request<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">DeleteUserRequest<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Response<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">DeleteUserResponse<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"n\">Status<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">req<\/span> <span class=\"o\">=<\/span> <span class=\"n\">request<\/span><span class=\"nf\">.into_inner<\/span><span class=\"p\">();<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">delete_user<\/span><span class=\"p\">(<\/span><span class=\"n\">req<\/span><span class=\"py\">.id<\/span><span class=\"p\">)<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">match<\/span> <span class=\"n\">db<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">_<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"p\">{<\/span>\n                <span class=\"k\">let<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">DeleteUserResponse<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"n\">data<\/span><span class=\"p\">:<\/span> <span class=\"nn\">String<\/span><span class=\"p\">::<\/span><span class=\"nf\">from<\/span><span class=\"p\">(<\/span><span class=\"s\">\"User details deleted successfully!\"<\/span><span class=\"p\">),<\/span>\n                <span class=\"p\">};<\/span>\n                <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"nn\">Response<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">))<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"nn\">Status<\/span><span class=\"p\">::<\/span><span class=\"nf\">aborted<\/span><span class=\"p\">(<\/span><span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error<\/span><span class=\"p\">))),<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n\n    <span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">get_all_users<\/span><span class=\"p\">(<\/span>\n        <span class=\"o\">&amp;<\/span><span class=\"k\">self<\/span><span class=\"p\">,<\/span>\n        <span class=\"n\">_<\/span><span class=\"p\">:<\/span> <span class=\"n\">Request<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Empty<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span>\n    <span class=\"p\">)<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">Response<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">GetAllUsersResponse<\/span><span class=\"o\">&gt;<\/span><span class=\"p\">,<\/span> <span class=\"n\">Status<\/span><span class=\"o\">&gt;<\/span> <span class=\"p\">{<\/span>\n        <span class=\"k\">let<\/span> <span class=\"n\">db<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">DBMongo<\/span><span class=\"p\">::<\/span><span class=\"nf\">get_all_users<\/span><span class=\"p\">()<\/span><span class=\"k\">.await<\/span><span class=\"p\">;<\/span>\n        <span class=\"k\">match<\/span> <span class=\"n\">db<\/span> <span class=\"p\">{<\/span>\n            <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"n\">resp<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"p\">{<\/span>\n                <span class=\"k\">let<\/span> <span class=\"k\">mut<\/span> <span class=\"n\">user_list<\/span><span class=\"p\">:<\/span> <span class=\"nb\">Vec<\/span><span class=\"o\">&lt;<\/span><span class=\"n\">UserResponse<\/span><span class=\"o\">&gt;<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">Vec<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">();<\/span>\n                <span class=\"k\">for<\/span> <span class=\"n\">data<\/span> <span class=\"k\">in<\/span> <span class=\"n\">resp<\/span> <span class=\"p\">{<\/span>\n                    <span class=\"k\">let<\/span> <span class=\"n\">mapped_user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">UserResponse<\/span> <span class=\"p\">{<\/span>\n                        <span class=\"n\">id<\/span><span class=\"p\">:<\/span> <span class=\"n\">data<\/span><span class=\"py\">.id<\/span><span class=\"nf\">.unwrap<\/span><span class=\"p\">()<\/span><span class=\"nf\">.to_string<\/span><span class=\"p\">(),<\/span>\n                        <span class=\"n\">name<\/span><span class=\"p\">:<\/span> <span class=\"n\">data<\/span><span class=\"py\">.name<\/span><span class=\"p\">,<\/span>\n                        <span class=\"n\">location<\/span><span class=\"p\">:<\/span> <span class=\"n\">data<\/span><span class=\"py\">.location<\/span><span class=\"p\">,<\/span>\n                        <span class=\"n\">title<\/span><span class=\"p\">:<\/span> <span class=\"n\">data<\/span><span class=\"py\">.title<\/span><span class=\"p\">,<\/span>\n                    <span class=\"p\">};<\/span>\n                    <span class=\"n\">user_list<\/span><span class=\"nf\">.push<\/span><span class=\"p\">(<\/span><span class=\"n\">mapped_user<\/span><span class=\"p\">);<\/span>\n                <span class=\"p\">}<\/span>\n                <span class=\"k\">let<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"n\">GetAllUsersResponse<\/span> <span class=\"p\">{<\/span> <span class=\"n\">users<\/span><span class=\"p\">:<\/span> <span class=\"n\">user_list<\/span> <span class=\"p\">};<\/span>\n                <span class=\"nf\">Ok<\/span><span class=\"p\">(<\/span><span class=\"nn\">Response<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">))<\/span>\n            <span class=\"p\">}<\/span>\n            <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"n\">error<\/span><span class=\"p\">)<\/span> <span class=\"k\">=&gt;<\/span> <span class=\"nf\">Err<\/span><span class=\"p\">(<\/span><span class=\"nn\">Status<\/span><span class=\"p\">::<\/span><span class=\"nf\">aborted<\/span><span class=\"p\">(<\/span><span class=\"nd\">format!<\/span><span class=\"p\">(<\/span><span class=\"s\">\"{}\"<\/span><span class=\"p\">,<\/span> <span class=\"n\">error<\/span><span class=\"p\">))),<\/span>\n        <span class=\"p\">}<\/span>\n    <span class=\"p\">}<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0642\u0637\u0639\u0647 \u0628\u0627\u0644\u0627 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>  <strong>\u062e\u0637: 1 &#8211; 8<\/strong>: \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0648\u0627\u0631\u062f \u0645\u06cc \u06a9\u0646\u062f (\u0627\u0632 \u062c\u0645\u0644\u0647 gRPC \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647)<\/li>\n<li>  <strong>\u062e\u0637: 10 &#8211; 12<\/strong>: \u0627\u0639\u0644\u0627\u0645 \u0645\u06cc \u06a9\u0646\u062f <code>user<\/code> struct \u0628\u0631\u0627\u06cc \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0646 \u06a9\u062f\u0647\u0627\u06cc \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 gRPC \u0645\u0627 \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 <code>tonic::include_proto!(\"user\")<\/code>\n<\/li>\n<li>  <strong>\u062e\u0637: 14 &#8211; 15<\/strong>: \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 <code>User<\/code> struct \u0628\u0631\u0627\u06cc \u0646\u0634\u0627\u0646 \u062f\u0627\u062f\u0646 \u0645\u062f\u0644 \u0628\u0631\u0646\u0627\u0645\u0647 \u0645\u0627<\/li>\n<li>  <strong>\u062e\u0637: 17 &#8211; 125<\/strong>: \u0627\u062c\u0631\u0627 \u0645\u06cc \u06a9\u0646\u062f <code>UserService<\/code> \u0635\u0641\u0627\u062a \u0627\u0632 \u06a9\u062f \u062a\u0648\u0644\u06cc\u062f \u0634\u062f\u0647 \u062a\u0648\u0633\u0637 gRPC \u0628\u0631\u0627\u06cc <code>User<\/code> \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u0631\u0648\u0634\u200c\u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0648 \u0628\u0631\u06af\u0631\u062f\u0627\u0646\u062f\u0646 \u067e\u0627\u0633\u062e\u200c\u0647\u0627\u06cc \u0645\u0646\u0627\u0633\u0628 \u0647\u0645\u0627\u0646\u0637\u0648\u0631 \u06a9\u0647 \u062a\u0648\u0633\u0637 gRPC \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc\u200c\u0634\u0648\u062f<\/li>\n<\/ul>\n<p><strong>\u0627\u06cc\u062c\u0627\u062f \u0633\u0631\u0648\u0631<\/strong><\/p>\n<p>\u0628\u0627 \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0633\u0631\u0648\u0631 gRPC \u0628\u0631\u0646\u0627\u0645\u0647 \u0631\u0627 \u0628\u0627 \u062a\u063a\u06cc\u06cc\u0631 \u062f\u0627\u062f\u0646 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0646\u06cc\u0645 <code>main.rs<\/code> \u0641\u0627\u06cc\u0644 \u0645\u0637\u0627\u0628\u0642 \u0634\u06a9\u0644 \u0632\u06cc\u0631:<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight rust\"><code><span class=\"k\">use<\/span> <span class=\"nn\">std<\/span><span class=\"p\">::<\/span><span class=\"nn\">net<\/span><span class=\"p\">::<\/span><span class=\"n\">SocketAddr<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">use<\/span> <span class=\"nn\">service<\/span><span class=\"p\">::{<\/span><span class=\"nn\">user<\/span><span class=\"p\">::<\/span><span class=\"nn\">user_service_server<\/span><span class=\"p\">::<\/span><span class=\"n\">UserServiceServer<\/span><span class=\"p\">,<\/span> <span class=\"n\">User<\/span><span class=\"p\">};<\/span>\n<span class=\"k\">use<\/span> <span class=\"nn\">tonic<\/span><span class=\"p\">::<\/span><span class=\"nn\">transport<\/span><span class=\"p\">::<\/span><span class=\"n\">Server<\/span><span class=\"p\">;<\/span>\n\n<span class=\"k\">mod<\/span> <span class=\"n\">mongo_connection<\/span><span class=\"p\">;<\/span>\n<span class=\"k\">mod<\/span> <span class=\"n\">service<\/span><span class=\"p\">;<\/span>\n\n<span class=\"nd\">#[tokio::main]<\/span>\n<span class=\"k\">async<\/span> <span class=\"k\">fn<\/span> <span class=\"nf\">main<\/span><span class=\"p\">()<\/span> <span class=\"k\">-&gt;<\/span> <span class=\"nb\">Result<\/span><span class=\"o\">&lt;<\/span><span class=\"p\">(),<\/span> <span class=\"nb\">Box<\/span><span class=\"o\">&lt;<\/span><span class=\"k\">dyn<\/span> <span class=\"nn\">std<\/span><span class=\"p\">::<\/span><span class=\"nn\">error<\/span><span class=\"p\">::<\/span><span class=\"n\">Error<\/span><span class=\"o\">&gt;&gt;<\/span> <span class=\"p\">{<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">address<\/span><span class=\"p\">:<\/span> <span class=\"n\">SocketAddr<\/span> <span class=\"o\">=<\/span> <span class=\"s\">\"[::1]:8080\"<\/span><span class=\"nf\">.parse<\/span><span class=\"p\">()<\/span><span class=\"nf\">.unwrap<\/span><span class=\"p\">();<\/span>\n    <span class=\"k\">let<\/span> <span class=\"n\">user<\/span> <span class=\"o\">=<\/span> <span class=\"nn\">User<\/span><span class=\"p\">::<\/span><span class=\"nf\">default<\/span><span class=\"p\">();<\/span>\n\n    <span class=\"nn\">Server<\/span><span class=\"p\">::<\/span><span class=\"nf\">builder<\/span><span class=\"p\">()<\/span>\n        <span class=\"nf\">.add_service<\/span><span class=\"p\">(<\/span><span class=\"nn\">UserServiceServer<\/span><span class=\"p\">::<\/span><span class=\"nf\">new<\/span><span class=\"p\">(<\/span><span class=\"n\">user<\/span><span class=\"p\">))<\/span>\n        <span class=\"nf\">.serve<\/span><span class=\"p\">(<\/span><span class=\"n\">address<\/span><span class=\"p\">)<\/span>\n        <span class=\"k\">.await<\/span><span class=\"o\">?<\/span><span class=\"p\">;<\/span>\n    <span class=\"nf\">Ok<\/span><span class=\"p\">(())<\/span>\n<span class=\"p\">}<\/span>\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p>\u0642\u0637\u0639\u0647 \u0628\u0627\u0644\u0627 \u06a9\u0627\u0631\u0647\u0627\u06cc \u0632\u06cc\u0631 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u062f:<\/p>\n<ul>\n<li>    \u0648\u0627\u0628\u0633\u062a\u06af\u06cc \u0647\u0627\u06cc \u0645\u0648\u0631\u062f \u0646\u06cc\u0627\u0632 \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0631\u062f\u0647 \u0648 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>mongo_connection<\/code> \u0648 <code>service<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u0645\u0627\u0698\u0648\u0644<\/li>\n<li>    \u0628\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 \u0627\u0632 \u06cc\u06a9 \u0633\u0631\u0648\u0631 \u0627\u06cc\u062c\u0627\u062f \u0645\u06cc \u06a9\u0646\u062f <code>Server::builder()<\/code> \u0631\u0648\u0634 \u0648 \u0627\u0636\u0627\u0641\u0647 \u0645\u06cc \u06a9\u0646\u062f <code>UserServiceServer<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 \u06cc\u06a9 \u062e\u062f\u0645\u062a<\/li>\n<\/ul>\n<p>\u0628\u0627 \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0627\u062c\u0631\u0627\u06cc \u062f\u0633\u062a\u0648\u0631 \u0632\u06cc\u0631 \u062f\u0631 \u062a\u0631\u0645\u06cc\u0646\u0627\u0644 \u062e\u0648\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645.<\/p>\n<div class=\"highlight js-code-highlight\">\n<pre class=\"highlight shell\"><code>cargo run\n<\/code><\/pre>\n<div class=\"highlight__panel js-actions-panel\">\n<div class=\"highlight__panel-action js-fullscreen-code-action\">\n    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-on\"><title>\u0648\u0627\u0631\u062f \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M16 3h6v6h-2V5h-4V3zM2 3h6v2H4v4H2V3zm18 16v-4h2v6h-6v-2h4zM4 19h4v2H2v-6h2v4z\"\/>\n<\/svg><\/p>\n<p>    <svg xmlns=\"http:\/\/www.w3.org\/2000\/svg\" width=\"20px\" height=\"20px\" viewbox=\"0 0 24 24\" class=\"highlight-action crayons-icon highlight-action--fullscreen-off\"><title>\u0627\u0632 \u062d\u0627\u0644\u062a \u062a\u0645\u0627\u0645 \u0635\u0641\u062d\u0647 \u062e\u0627\u0631\u062c \u0634\u0648\u06cc\u062f<\/title>\n    <path d=\"M18 7h4v2h-6V3h2v4zM8 9H2V7h4V3h2v6zm10 8v4h-2v-6h6v2h-4zM8 15v6H6v-4H2v-2h6z\"\/>\n<\/svg><\/p>\n<\/div>\n<\/div>\n<\/div>\n<h2><span class=\"ez-toc-section\" id=\"%D8%AA%D8%B3%D8%AA_%D8%A8%D8%A7_%D9%BE%D8%B3%D8%AA%DA%86%DB%8C\"><\/span>\n<p>  \u062a\u0633\u062a \u0628\u0627 \u067e\u0633\u062a\u0686\u06cc<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0628\u0627 \u0631\u0627\u0647\u200c\u0627\u0646\u062f\u0627\u0632\u06cc \u0633\u0631\u0648\u0631 \u0645\u0627\u060c \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u062e\u0648\u062f \u0631\u0627 \u0628\u0627 \u0627\u06cc\u062c\u0627\u062f \u06cc\u06a9 \u0628\u0631\u0646\u0627\u0645\u0647 \u062c\u062f\u06cc\u062f \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645 <strong>\u062f\u0631\u062e\u0648\u0627\u0633\u062a gRPC<\/strong>.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/05\/1684856551_269_\u0634\u0631\u0648\u0639-\u06a9\u0627\u0631-\u0628\u0627-gRPC-\u062f\u0631-Rust.png\" alt=\"\u0627\u06cc\u062c\u0627\u062f \u062c\u062f\u06cc\u062f\" loading=\"lazy\" width=\"800\" height=\"64\" title=\"\"><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/05\/1684856551_879_\u0634\u0631\u0648\u0639-\u06a9\u0627\u0631-\u0628\u0627-gRPC-\u062f\u0631-Rust.png\" alt=\"\u062f\u0631\u062e\u0648\u0627\u0633\u062a gRPC \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f\" loading=\"lazy\" width=\"800\" height=\"493\" title=\"\"><\/p>\n<p>\u0648\u0631\u0648\u062f\u06cc <code>grpc:\/\/[::1]:8080<\/code> \u0628\u0647 \u0639\u0646\u0648\u0627\u0646 URL\u060c \u0631\u0627 \u0627\u0646\u062a\u062e\u0627\u0628 \u06a9\u0646\u06cc\u062f <strong>\u06cc\u06a9 \u0641\u0627\u06cc\u0644 .proto \u0631\u0627 \u0648\u0627\u0631\u062f \u06a9\u0646\u06cc\u062f<\/strong> \u06af\u0632\u06cc\u0646\u0647 \u0648 \u0622\u067e\u0644\u0648\u062f <code>user.proto<\/code> \u0641\u0627\u06cc\u0644\u06cc \u06a9\u0647 \u0642\u0628\u0644\u0627 \u0627\u06cc\u062c\u0627\u062f \u06a9\u0631\u062f\u06cc\u0645<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/05\/1684856551_584_\u0634\u0631\u0648\u0639-\u06a9\u0627\u0631-\u0628\u0627-gRPC-\u062f\u0631-Rust.png\" alt=\"\u0622\u062f\u0631\u0633 \u0648 \u0641\u0627\u06cc\u0644 \u067e\u0631\u0648\u062a\u0648 \u0622\u067e\u0644\u0648\u062f \u06a9\u0646\u06cc\u062f\" loading=\"lazy\" width=\"800\" height=\"493\" title=\"\"><\/p>\n<p>\u0628\u0627 \u0627\u0646\u062c\u0627\u0645 \u0627\u06cc\u0646 \u06a9\u0627\u0631\u060c \u0631\u0648\u0634 \u0645\u0631\u0628\u0648\u0637\u0647 \u067e\u0631 \u0645\u06cc \u0634\u0648\u062f \u0648 \u0645\u06cc \u062a\u0648\u0627\u0646\u06cc\u0645 \u0622\u0646\u0647\u0627 \u0631\u0627 \u0645\u0637\u0627\u0628\u0642 \u0628\u0627 \u0622\u0646 \u0622\u0632\u0645\u0627\u06cc\u0634 \u06a9\u0646\u06cc\u0645.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/05\/1684856552_207_\u0634\u0631\u0648\u0639-\u06a9\u0627\u0631-\u0628\u0627-gRPC-\u062f\u0631-Rust.png\" alt=\"getAllUsers\" loading=\"lazy\" width=\"800\" height=\"493\" title=\"\"><br \/><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/05\/1684856552_104_\u0634\u0631\u0648\u0639-\u06a9\u0627\u0631-\u0628\u0627-gRPC-\u062f\u0631-Rust.png\" alt=\"getAUser\" loading=\"lazy\" width=\"800\" height=\"493\" title=\"\"><\/p>\n<p>\u0647\u0645\u0686\u0646\u06cc\u0646 \u0645\u06cc\u200c\u062a\u0648\u0627\u0646\u06cc\u0645 \u0628\u0627 \u0628\u0631\u0631\u0633\u06cc \u0645\u062c\u0645\u0648\u0639\u0647 MongoDB \u062e\u0648\u062f \u062a\u0623\u06cc\u06cc\u062f \u06a9\u0646\u06cc\u0645 \u06a9\u0647 \u0633\u0631\u0648\u0631 gRPC \u0645\u0627 \u06a9\u0627\u0631 \u0645\u06cc\u200c\u06a9\u0646\u062f<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/nabfollower.com\/blog\/wp-content\/uploads\/2023\/05\/1684856552_200_\u0634\u0631\u0648\u0639-\u06a9\u0627\u0631-\u0628\u0627-gRPC-\u062f\u0631-Rust.png\" alt=\"\u0645\u062c\u0645\u0648\u0639\u0647\" loading=\"lazy\" width=\"800\" height=\"396\" title=\"\"><\/p>\n<h2><span class=\"ez-toc-section\" id=\"%D9%86%D8%AA%DB%8C%D8%AC%D9%87\"><\/span>\n<p>  \u0646\u062a\u06cc\u062c\u0647<br \/>\n<span class=\"ez-toc-section-end\"><\/span><\/h2>\n<p>\u0627\u06cc\u0646 \u067e\u0633\u062a \u062f\u0631\u0628\u0627\u0631\u0647 \u0686\u06cc\u0633\u062a\u06cc gRPC\u060c \u0646\u0642\u0634 \u0622\u0646 \u062f\u0631 \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647\u200c\u0647\u0627\u06cc \u0645\u0642\u06cc\u0627\u0633\u200c\u067e\u0630\u06cc\u0631 \u0648 \u0646\u062d\u0648\u0647 \u0634\u0631\u0648\u0639 \u0628\u0627 \u0633\u0627\u062e\u062a \u06cc\u06a9 \u0633\u0631\u0648\u06cc\u0633 \u0645\u062f\u06cc\u0631\u06cc\u062a \u06a9\u0627\u0631\u0628\u0631 \u0628\u0627 Rust \u0648 MongoDB \u0628\u062d\u062b \u0645\u06cc\u200c\u06a9\u0646\u062f.  \u0641\u0631\u0627\u062a\u0631 \u0627\u0632 \u0622\u0646\u0686\u0647 \u062f\u0631 \u0628\u0627\u0644\u0627 \u0645\u0648\u0631\u062f \u0628\u062d\u062b \u0642\u0631\u0627\u0631 \u06af\u0631\u0641\u062a\u060c gRPC \u062a\u06a9\u0646\u06cc\u06a9 \u0647\u0627\u06cc \u0642\u0648\u06cc \u062f\u0631 \u0645\u0648\u0631\u062f \u0627\u062d\u0631\u0627\u0632 \u0647\u0648\u06cc\u062a\u060c \u0645\u062f\u06cc\u0631\u06cc\u062a \u062e\u0637\u0627\u060c \u0639\u0645\u0644\u06a9\u0631\u062f \u0648 \u063a\u06cc\u0631\u0647 \u0627\u0631\u0627\u0626\u0647 \u0645\u06cc \u062f\u0647\u062f.<\/p>\n<p>\u0627\u06cc\u0646 \u0645\u0646\u0627\u0628\u0639 \u0645\u0645\u06a9\u0646 \u0627\u0633\u062a \u0645\u0641\u06cc\u062f \u0628\u0627\u0634\u0646\u062f:<\/p>\n<\/p><\/div>\n","protected":false},"excerpt":{"rendered":"<p>\u0645\u0639\u0645\u0627\u0631\u06cc \u0645\u06cc\u06a9\u0631\u0648\u0633\u0631\u0648\u06cc\u0633 \u0647\u0627 \u06cc\u06a9\u06cc \u0627\u0632 \u0631\u0648\u0634 \u0647\u0627\u06cc \u0627\u0631\u062c\u062d \u0628\u0631\u0627\u06cc \u0633\u0627\u062e\u062a \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u06a9\u0627\u0631\u0628\u0631\u062f\u06cc \u0645\u0642\u06cc\u0627\u0633 \u067e\u0630\u06cc\u0631 \u0648 \u0642\u0648\u06cc \u0627\u0633\u062a. \u0627\u06cc\u0646 \u0634\u0627\u0645\u0644 \u062a\u0642\u0633\u06cc\u0645 \u0628\u0631\u0646\u0627\u0645\u0647 \u0647\u0627\u06cc \u0628\u0632\u0631\u06af \u0628\u0647 \u0627\u062c\u0632\u0627\u06cc \u06a9\u0648\u0686\u06a9\u062a\u0631 \u0627\u0633\u062a \u06a9\u0647 \u0628\u0647 \u062e\u0648\u0628\u06cc \u062a\u0639\u0631\u06cc\u0641 \u0634\u062f\u0647 \u0627\u0646\u062f\u060c \u06cc\u06a9 \u06a9\u0627\u0631 \u062e\u0627\u0635 \u0631\u0627 \u0627\u0646\u062c\u0627\u0645 \u0645\u06cc \u062f\u0647\u0646\u062f \u0648 \u0627\u0632 \u0645\u062c\u0645\u0648\u0639\u0647 \u0647\u0627\u06cc\u06cc \u0627\u0632 \u0631\u0627\u0628\u0637 \u0628\u0631\u0646\u0627\u0645\u0647 \u0646\u0648\u06cc\u0633\u06cc \u0628\u0631\u0646\u0627\u0645\u0647 (API) \u0628\u0631\u0627\u06cc \u0627\u0631\u062a\u0628\u0627\u0637 \u0622\u0646\u0647\u0627 \u0627\u0633\u062a\u0641\u0627\u062f\u0647 &hellip;<\/p>\n","protected":false},"author":2,"featured_media":24468,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"fifu_image_url":"","fifu_image_alt":"","footnotes":""},"categories":[339],"tags":[],"class_list":["post-24467","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-dev"],"_links":{"self":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/24467","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/comments?post=24467"}],"version-history":[{"count":0,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/posts\/24467\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media\/24468"}],"wp:attachment":[{"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/media?parent=24467"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/categories?post=24467"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/nabfollower.com\/blog\/wp-json\/wp\/v2\/tags?post=24467"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}