{"id":21765628,"url":"https://github.com/dr-montasir/cans","last_synced_at":"2025-10-30T08:56:12.621Z","repository":{"id":258720354,"uuid":"871784015","full_name":"dr-montasir/cans","owner":"dr-montasir","description":"An elegant and lightweight Rust-based literal template engine for managing web content, enhanced with a world module for streamlined regional and city information, as well as robust MIME type management.","archived":false,"fork":false,"pushed_at":"2025-03-07T22:11:00.000Z","size":56,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-29T07:41:19.025Z","etag":null,"topics":["parser-implementations","template-engine","web-programming"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/cans","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dr-montasir.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2024-10-12T23:30:29.000Z","updated_at":"2025-08-09T11:15:07.000Z","dependencies_parsed_at":"2025-01-16T22:21:49.634Z","dependency_job_id":"eb02f184-8524-4e9b-a02f-6f748e79197f","html_url":"https://github.com/dr-montasir/cans","commit_stats":null,"previous_names":["dr-montasir/cans"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/dr-montasir/cans","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dr-montasir%2Fcans","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dr-montasir%2Fcans/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dr-montasir%2Fcans/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dr-montasir%2Fcans/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dr-montasir","download_url":"https://codeload.github.com/dr-montasir/cans/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dr-montasir%2Fcans/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279005463,"owners_count":26083900,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-10T02:00:06.843Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["parser-implementations","template-engine","web-programming"],"created_at":"2024-11-26T13:13:11.871Z","updated_at":"2025-10-30T08:56:12.613Z","avatar_url":"https://github.com/dr-montasir.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cbr\u003e\n  \u003ca href=\"https://github.com/dr-montasir/cans\"\u003e\n      \u003cimg src=\"cans-logo.svg\" width=\"100\"\u003e\n  \u003c/a\u003e\n  \u003cbr\u003e\n\n[\u003cimg alt=\"github\" src=\"https://img.shields.io/badge/github-dr%20montasir%20/%20cans-8da0cb?style=for-the-badge\u0026labelColor=555555\u0026logo=github\" height=\"22\"\u003e](https://github.com/dr-montasir/cans)[\u003cimg alt=\"crates.io\" src=\"https://img.shields.io/crates/v/cans.svg?style=for-the-badge\u0026color=fc8d62\u0026logo=rust\" height=\"22\"\u003e](https://crates.io/crates/cans)[\u003cimg alt=\"docs.rs\" src=\"https://img.shields.io/badge/docs.rs-cans-66c2a5?style=for-the-badge\u0026labelColor=555555\u0026logo=docs.rs\" height=\"22\"\u003e](https://docs.rs/cans)[\u003cimg alt=\"license\" src=\"https://img.shields.io/badge/license-apache_2.0-4a98f7.svg?style=for-the-badge\u0026labelColor=555555\u0026logo=apache\" height=\"22\"\u003e](https://choosealicense.com/licenses/apache-2.0)\n\n  \u003ch1\u003eCANS\u003c/h1\u003e\n\n  \u003cp\u003eAn elegant and lightweight Rust-based literal template engine for managing web content, enhanced with a world module for streamlined regional and city information, as well as robust MIME type management.\u003c/p\u003e\n\u003c/div\u003e\n\n## Table of Contents\n\n- [Overview](#overview)\n- [Changelog](#changelog)\n- [Features](#features)\n- [Installation](#installation)\n- [Usage](#usage)\n- [Documentation](#documentation)\n- [License](#license)\n- [Contributing](#contributing)\n- [Donations](#donations)\n- [Author](#author)\n\n## Overview\n\nThe **CANS** templating engine is an elegant and efficient solution developed in Rust, designed for developers who prioritize simplicity and type safety. This crate allows you to create dynamic web pages and applications with minimal boilerplate code, ensuring that your templates are easy to read and maintain.\n\nWhile **CANS** is optimized for seamless integration with the [Fluxor](https://crates.io/crates/fluxor) framework, it also provides the flexibility to work with any framework or content type, making it a versatile choice for a wide range of projects.\n\n## Changelog\n\n[![github](https://img.shields.io/badge/github-%20changelog-8da0cb?style=for-the-badge\u0026labelColor=555555\u0026logo=github)](https://github.com/dr-montasir/cans/blob/main/CHANGELOG.md)\n\n## Features\n\n- **Simplicity**: Easy-to-read syntax that minimizes boilerplate.\n- **Type Safety**: Leverages Rust's type system for safe template rendering.\n- **Dynamic Content**: Supports dynamic insertion of values, loops, and conditionals.\n- **Integration**: Works seamlessly with various web frameworks.\n\n## Installation\n\nRun the following Cargo command in your project directory:\n\n```shell\ncargo add cans\n```\n\nor add `cans` to your `Cargo.toml` file:\n\n```toml\n[dependencies]\ncans = \"MAJOR.MINOR.PATCH\" # Replace with the latest version\n```\n\n## Usage\n\n### Template\n\nCANS provides robust support for templating, including support for handling HTML, looping through collections, and rendering text. Below are some examples demonstrating how to use the `do_html` macro, the `do_forloop` macro, and the `do_text` function.\n\n### Example: Using the do_html Macro\n\n```rust\nuse cans::html::{do_html, do_text, alpine};\n\npub const HEAD: \u0026str = r#\"\u003chead\u003e\n\u003cmeta charset=\"UTF-8\"\u003e\n    {{alpinejs}}\n    \u003ctitle\u003e{{page_title}} Page\u003c/title\u003e\n\u003c/head\u003e\"#;\n\npub const HOME_TEMPLATE: \u0026str = r#\"\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  {{HEAD}}\n  \u003cbody\u003e\n    \u003ch1\u003eHome Page\u003c/h1\u003e\n    \u003cdiv x-data=\"{ open: false }\"\u003e\n        \u003cbutton x-show=\"!open\" @click=\"open = true\"\u003eShow\u003c/button\u003e\n        \u003cbutton x-show=\"open\" @click=\"open = false\"\u003eHide\u003c/button\u003e\n        \u003cspan x-show=\"open\"\u003e\n            CANS template with Alpine.js\n        \u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\"#;\n\npub fn do_home_page() -\u003e String {\n    // Alpine version, e.g., \"3.15.0\" or \"latest\" for the most recent version.\n    do_html!(HOME_TEMPLATE, HEAD = HEAD, alpinejs = alpine(\"latest\"), page_title = do_text(\"Home\"))\n}\n\npub const ABOUT_TEMPLATE: \u0026str = r#\"\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  {{HEAD}}\n  \u003cbody\u003e\n    \u003ch1\u003eAbout Page\u003c/h1\u003e\n    \u003cp\u003e\n        {{component_if}}\n    \u003c/p\u003e\n\n    \u003cdiv x-data=\"{ count: 0 }\"\u003e\n        \u003cbutton x-on:click=\"count--\"\u003eDecrement\u003c/button\u003e\n        \u003cspan x-text=\"count\"\u003e\u003c/span\u003e\n        \u003cbutton x-on:click=\"count++\"\u003eIncrement\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\"#;\n\npub fn do_about_page() -\u003e String {\n    let component_if: \u0026str;\n    let x = 3;\n\n    if x == 1 {\n        component_if = \"\u003ca href='#'\u003e\u003ci\u003ex = 1\u003c/i\u003e\u003c/a\u003e\";\n    } else if x == 2 {\n        component_if = r#\"\u003ca href='#'\u003e\u003ci\u003ex = {{x}}\u003c/i\u003e\u003c/a\u003e\"#;\n    } else {\n        component_if = \"\u003ca href=\\\"#\\\"\u003e\u003ci\u003ex ≠ 1 \u0026 x  ≠ 2. The 'x' value is ( {{x}} )\u003c/i\u003e\u003c/a\u003e\";\n    };\n\n    do_html!(\n        ABOUT_TEMPLATE,\n        HEAD = HEAD,\n        // Alpine version \"3.10.0\"\n        alpinejs = alpine(\"3.10.0\"),\n        page_title = do_text(\"About\"),\n        component_if = component_if,\n        x = x // x must be defined after component_if.\n    )\n}\n\nfn main() {\n   let home_page = do_home_page();\n   println!(\"{}\", home_page);\n\n   let about_page = do_about_page();\n   println!(\"{}\", about_page);\n}\n```\n\n```html\n\u003c!-- home page output --\u003e\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  \u003chead\u003e\n\u003cmeta charset=\"UTF-8\"\u003e\n    \u003cscript src=\"https://unpkg.com/alpinejs@latest/dist/cdn.min.js\" defer\u003e\u003c/script\u003e\n    \u003ctitle\u003eHome Page\u003c/title\u003e\n\u003c/head\u003e\n  \u003cbody\u003e\n    \u003ch1\u003eHome Page\u003c/h1\u003e\n    \u003cdiv x-data=\"{ open: false }\"\u003e\n        \u003cbutton x-show=\"!open\" @click=\"open = true\"\u003eShow\u003c/button\u003e\n        \u003cbutton x-show=\"open\" @click=\"open = false\"\u003eHide\u003c/button\u003e\n        \u003cspan x-show=\"open\"\u003e\n            CANS template with Alpine.js\n        \u003c/span\u003e\n    \u003c/div\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n\n```html\n\u003c!-- about page output --\u003e\n\u003c!DOCTYPE html\u003e\n\u003chtml\u003e\n  \u003chead\u003e\n\u003cmeta charset=\"UTF-8\"\u003e\n    \u003cscript src=\"https://unpkg.com/alpinejs@3.10.0/dist/cdn.min.js\" defer\u003e\u003c/script\u003e\n    \u003ctitle\u003eAbout Page\u003c/title\u003e\n\u003c/head\u003e\n  \u003cbody\u003e\n    \u003ch1\u003eAbout Page\u003c/h1\u003e\n    \u003cp\u003e\n        \u003ca href=\"#\"\u003e\u003ci\u003ex ≠ 1 \u0026 x  ≠ 2. The 'x' value is ( 3 )\u003c/i\u003e\u003c/a\u003e\n    \u003c/p\u003e\n\n    \u003cdiv x-data=\"{ count: 0 }\"\u003e\n        \u003cbutton x-on:click=\"count--\"\u003eDecrement\u003c/button\u003e\n        \u003cspan x-text=\"count\"\u003e\u003c/span\u003e\n        \u003cbutton x-on:click=\"count++\"\u003eIncrement\u003c/button\u003e\n    \u003c/div\u003e\n  \u003c/body\u003e\n\u003c/html\u003e\n```\n\n\n\n### Example: Using the do_forloop Function\n\n```rust\nuse cans::html::do_forloop;\n\nfn main() {\n    let items = vec![\"Apple\", \"Banana\", \"Cherry\"];\n    let list_html = do_forloop(\u0026items, \"\u003cul\u003e\", \"\u003cli\u003e\", \"\u003c/li\u003e\", \"\u003c/ul\u003e\");\n    println!(\"{}\", list_html);\n    // Output: \u003cul\u003e\u003cli\u003eApple\u003c/li\u003e\u003cli\u003eBanana\u003c/li\u003e\u003cli\u003eCherry\u003c/li\u003e\u003c/ul\u003e\n\n    let float_vector = vec![1.0, 2.0, 3.0];\n    let forloop_float = do_forloop(\u0026float_vector, \"\", \"\", \"\", \"\");\n    println!(\"{}\", forloop_float);\n    // Output: 123\n}\n```\n\n### MIME Module\n\nThe **MIME** module in the `cans` crate provides functionalities for handling MIME types, which are essential for identifying and processing various types of files, such as HTML documents, images, and multimedia content. This module facilitates the identification, validation, and management of different MIME types used across the web, providing features such as:\n\n- **MIME Type Detection**: Automatically determine the MIME type of a file based on its extension or content.\n- **Type Validation**: Check if a specific MIME type is valid.\n- **Extension Retrieval**: Retrieve file extensions associated with given MIME types.\n- **Custom MIME Types**: Register and manage custom MIME types to suit specific requirements.\n\n```rust\nuse cans::mime::{\n    display_mime_types,\n    insert_mime_types,\n    manage_mime_types,\n    remove_mime_types,\n    set_mime_types\n};\n\nfn main() {\n   // Create a new HashMap and initialize it with default MIME types\n   let mut mime_types = set_mime_types();\n   \n   println!(\"Initial MIME types:\");\n   display_mime_types(\u0026mime_types);\n    \n    // Display the default count of MIME types\n    println!(\"The default length of MIME types: {}\", mime_types.len()); // Example output: 113\n    // Define an array of tuples for both already included and new MIME types\n    let included_mime_types = manage_mime_types(\u0026[\n        // Already included MIME types\n        (\"html\", \"text/html\"),\n        (\"css\", \"text/css\"),\n        (\"js\", \"application/javascript\"),\n        (\"svg\", \"image/svg+xml\"),\n        (\"gif\", \"image/gif\"),\n        (\"jpg\", \"image/jpeg\"),\n        (\"txt\", \"text/plain\"),\n        (\"json\", \"application/json\"),\n        // New MIME type to include\n        (\"some_ext\", \"some_mime\"),\n    ]);\n    // Insert new MIME types into the existing HashMap\n    insert_mime_types(\u0026mut mime_types, included_mime_types);\n    // Display the length after insertion\n    println!(\n        \"The length after inserting MIME types: {}\",\n        mime_types.len() // Example output: 114\n    );\n    // Display the updated MIME types\n    println!(\"\\nAfter inserting MIME types:\");\n    display_mime_types(\u0026mime_types);\n\n    // Define an array of tuples for both pre-existing and new MIME types\n    let excluded_mime_types = manage_mime_types(\u0026[\n        // Pre-existing MIME types by default\n        (\"html\", \"text/html\"),\n        (\"css\", \"text/css\"),\n        (\"js\", \"application/javascript\"),\n        (\"svg\", \"image/svg+xml\"),\n        (\"gif\", \"image/gif\"),\n        (\"jpg\", \"image/jpeg\"),\n        (\"txt\", \"text/plain\"),\n        (\"json\", \"application/json\"),\n        // New MIME type that is not part of the default list\n        (\"some_ext\", \"some_mime\"),\n    ]);\n    // Attempt to remove MIME types from the existing HashMap\n    remove_mime_types(\u0026mut mime_types, excluded_mime_types);\n    // Display the length after removal\n    println!(\n        \"The length after removing MIME types: {}\",\n        mime_types.len() // Example output: 105\n    );\n    // Display the updated MIME types\n    println!(\"\\nAfter removing MIME types:\");\n    display_mime_types(\u0026mime_types);\n}\n```\n\n### World Module\n\nA module that encapsulates the management of country details, including functionalities for inserting, deleting, retrieving, and sorting countries. Additionally, it provides features for managing city information within those countries, enabling users to insert, delete, retrieve, and sort city details. This comprehensive management system allows for seamless interaction between countries and their respective cities, facilitating efficient access to geographical and administrative data. Users can efficiently reset the dataset to accommodate new data for testing purposes. The module promotes data integrity and optimal memory management through precise control over entries. It allows for easy querying and manipulation of country and city information to support various applications.\n\n#### Complete example of using the world module\n\n```rust\nuse cans::world::{City, Country};\n\nfn main() {\n    // Create the country manager instance\n    let mut cm = Country::new();\n\n    // Example of retrieving all countries\n    println!(\"Current Countries: {:?}\", cm.retrieve());\n\n    // Inserting a new country with cities\n    cm.insert_one(\n        \"FR\",\n        vec![\"🇫🇷\", \"33\", \"France\", \"EUR\", \"Paris\"],\n        vec![\n            City {\n                name: \"Paris\",\n                gmt: vec![\"GMT+1\", \"GMT+2\"],\n                latitude: \"48.8566\",\n                longitude: \"2.3522\",\n                altitude: \"35\",\n            },\n            City {\n                name: \"Lyon\",\n                gmt: vec![\"GMT+1\", \"GMT+2\"],\n                latitude: \"45.763420\",\n                longitude: \"4.834277\",\n                altitude: \"105\",\n            },\n        ],\n    );\n    println!(\"After Inserting FR: {:?}\", cm.retrieve());\n\n    // Inserting multiple countries at once\n    let new_countries = vec![\n        (\n            \"IT\",\n            vec![\"🇮🇹\", \"39\", \"Italy\", \"EUR\", \"Rome\"],\n            vec![\n                City {\n                    name: \"Rome\",\n                    gmt: vec![\"GMT+1\", \"GMT+2\"],\n                    latitude: \"41.9028\",\n                    longitude: \"12.49637\",\n                    altitude: \"21\",\n                },\n                City {\n                    name: \"Milan\",\n                    gmt: vec![\"GMT+1\", \"GMT+2\"],\n                    latitude: \"45.464664\",\n                    longitude: \"9.188540\",\n                    altitude: \"122\",\n                },\n            ],\n        ),\n        (\n            \"DE\",\n            vec![\"🇩🇪\", \"49\", \"Germany\", \"EUR\", \"Berlin\"],\n            vec![\n                City {\n                    name: \"Berlin\",\n                    gmt: vec![\"GMT+1\", \"GMT+2\"],\n                    latitude: \"52.520008\",\n                    longitude: \"13.404954\",\n                    altitude: \"34\",\n                },\n                City {\n                    name: \"Munich\",\n                    gmt: vec![\"GMT+1\", \"GMT+2\"],\n                    latitude: \"48.137154\",\n                    longitude: \"11.576124\",\n                    altitude: \"520\",\n                },\n            ],\n        ),\n        (\n            \"FR\",\n            vec![\"🇫🇷\", \"33\", \"France\", \"EUR\", \"Paris\"],\n            vec![\n                City {\n                    name: \"Paris\",\n                    gmt: vec![\"GMT+1\", \"GMT+2\"],\n                    latitude: \"48.8566\",\n                    longitude: \"2.3522\",\n                    altitude: \"35\",\n                },\n                City {\n                    name: \"Lyon\",\n                    gmt: vec![\"GMT+1\", \"GMT+2\"],\n                    latitude: \"45.763420\",\n                    longitude: \"4.834277\",\n                    altitude: \"105\",\n                },\n            ],\n        ),\n    ];\n\n    // Example of inserting multiple countries\n    cm.insert_many(new_countries);\n    println!(\"After Inserting IT, DE and FR: {:?}\", cm.retrieve());\n\n    // Sorting countries in ascending order by name\n    let sorted_asc = cm.sort_asc();\n    println!(\"Countries Sorted Ascending: {:?}\", sorted_asc);\n\n    // Sorting countries in descending order by name\n    let sorted_desc = cm.sort_desc();\n    println!(\"Countries Sorted Descending: {:?}\", sorted_desc);\n\n    // Example to retrieve details for Sudan\n    let name = cm.country_detail(\"SD\", \"name\");\n    println!(\"Country Name: {}\", name); // Output the name of the country\n    let flag = cm.country_detail(\"SD\", \"flag\");\n    println!(\"Flag: {}\", flag); // Output the flag of the country\n    let country_calling_code = cm.country_detail(\"SD\", \"calling_code\");\n    println!(\"Calling Code: {}\", country_calling_code); // Output the calling code\n    let capital = cm.country_detail(\"SD\", \"capital\");\n    println!(\"Capital: {}\", capital); // Output the name of the capital city of Sudan\n\n    // Retrieve the list of cities in Sudan\n    let cities = cm.country_detail(\"SD\", \"cities\");\n    println!(\"Cities: {}\", cities); // Output the list of cities in Sudan\n\n    // Example of retrieving city details for Omdurman in Sudan\n    let omdurman_details = cm.city_details(\"SD\", \"Omdurman\");\n    println!(\"Omdurman Details: {}\", omdurman_details); // Output the details for Omdurman\n\n    // Example of retrieving specific detail about Khartoum\n    let khartoum_gmt = cm.city_detail(\"SD\", \"Khartoum\", \"gmt\"); // Example of retrieving GMT for Khartoum\n    let omdurman_altitude = cm.city_detail(\"SD\", \"Omdurman\", \"altitude\"); // Example of retrieving altitude for Omdurman\n    let bahri_altitude = cm.city_detail(\"SD\", \"Khartoum Bahri\", \"altitude\"); // Example of retrieving altitude for Khartoum Bahri\n\n    println!(\"Khartoum GMT: {}\", khartoum_gmt);\n    println!(\"Omdurman Altitude: {}\", omdurman_altitude);\n    println!(\"Khartoum Bahri Altitude: {}\", bahri_altitude);\n\n    // Example of adding a new city to an existing country (Saudi Arabia - \"SA\")\n    let new_city = City {\n        name: \"Dammam\",\n        gmt: vec![\"GMT+3\"],\n        latitude: \"26.4201\",\n        longitude: \"50.0888\",\n        altitude: \"5\",\n    };\n\n    // Insert the new city into Saudi Arabia\n    cm.insert_one_city(\"SA\", new_city);\n\n    // Retrieving the updated country details to see the new city (altitude = \"5\")\n    let updated_details_1 = cm.retrieve().get(\"SA\").unwrap();\n    println!(\n        \"Updated details (1) for Saudi Arabia: {:?}\",\n        updated_details_1\n    );\n\n    // Example of adding multiple new cities to an existing country (Saudi Arabia - \"SA\")\n    let new_cities = vec![\n        City {\n            name: \"Dammam\",\n            gmt: vec![\"GMT+3\"],\n            latitude: \"26.4201\",\n            longitude: \"50.0888\",\n            altitude: \"6\",\n        },\n        City {\n            name: \"Khobar\",\n            gmt: vec![\"GMT+3\"],\n            latitude: \"26.3040\",\n            longitude: \"50.1998\",\n            altitude: \"15\",\n        },\n    ];\n\n    // Insert the new cities into Saudi Arabia\n    cm.insert_many_cities(\"SA\", new_cities);\n\n    // Retrieving the updated country details to see the new added cities (Dammam: altitude = \"6\")\n    let updated_details_2 = cm.retrieve().get(\"SA\").unwrap();\n    println!(\n        \"Updated details (2) for Saudi Arabia: {:?}\",\n        updated_details_2\n    );\n    println!(\"Current Countries: {:?}\", cm.retrieve());\n\n    // Fetching a country not in the database\n    let invalid_country_code = \"XYZ\";\n    let invalid_details = cm.country_details(invalid_country_code);\n    println!(\"Invalid Country Details: {}\", invalid_details);\n\n    // Deletion examples\n\n    // 1. Delete a single city\n    cm.delete_one_city(\"SA\", \"Dammam\");\n    println!(\n        \"Cities after deleting Dammam: {:?}\",\n        cm.retrieve().get(\"SA\").unwrap().cities\n    );\n\n    // 2. Delete multiple cities\n    cm.delete_many_cities(\"SA\", \u0026[\"Khobar\", \"Jeddah\"]);\n    println!(\n        \"Cities after deleting Khobar and Jeddah: {:?}\",\n        cm.retrieve().get(\"SA\").unwrap().cities\n    );\n\n    // 3. Delete all cities\n    cm.delete_all_cities(\"SA\");\n    println!(\n        \"Cities after deleting all cities: {:?}\",\n        cm.retrieve().get(\"SA\").unwrap().cities\n    );\n\n    // Testing delete_one\n    cm.delete_one(\"FR\");\n    println!(\"After Deleting FR: {:?}\", cm.retrieve());\n\n    // Testing delete_many\n    cm.delete_many(\u0026[\"IT\", \"DE\"]);\n    println!(\"After Deleting IT and DE: {:?}\", cm.retrieve());\n\n    // Testing delete_all\n    cm.delete_all();\n    println!(\"After Deleting All: {:?}\", cm.retrieve());\n}\n```\n\n#### Output\n\n```shell\nCurrent Countries: {\"DZ\": Details { flag: \"🇩🇿\", calling_code: \"213\", name: \"Algeria\", currency: \"DZD\", capital: \"Algiers\", cities: [City { name: \"Algiers\", gmt: [\"GMT+1\"], latitude: \"36.737232\", longitude: \"3.086472\", altitude: \"424\" }, City { name: \"Oran\", gmt: [\"GMT+1\"], latitude: \"35.69694440\", longitude: \"0.63305560\", altitude: \"0.9\" }] }, \"GB\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Manchester\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"53.4808\", longitude: \"-2.2426\", altitude: \"38\" }] }, \"SD\": Details { flag: \"🇸🇩\", calling_code: \"249\", name: \"Sudan\", currency: \"SDG\", capital: \"Khartoum\", cities: [City { name: \"Khartoum\", gmt: [\"GMT+2\"], latitude: \"15.5007\", longitude: \"32.5599\", altitude: \"385\" }, City { name: \"Omdurman\", gmt: [\"GMT+2\"], latitude: \"15.6866\", longitude: \"32.4752\", altitude: \"375\" }, City { name: \"Khartoum Bahri\", gmt: [\"GMT+2\"], latitude: \"15.6151\", longitude: \"32.552\", altitude: \"360\" }] }, \"SA\": Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }] }, \"BH\": Details { flag: \"🇧🇭\", calling_code: \"973\", name: \"Bahrain\", currency: \"BHD\", capital: \"Manama\", cities: [City { name: \"Manama\", gmt: [\"GMT+3\"], latitude: \"26.22787\", longitude: \"50.58565\", altitude: \"10\" }, City { name: \"Riffa\", gmt: [\"GMT+3\"], latitude: \"26.129999\", longitude: \"50.555000\", altitude: \"15\" }] }, \"US\": Details { flag: \"🇺🇸\", calling_code: \"1\", name: \"United States\", currency: \"USD\", capital: \"Washington, D.C.\", cities: [City { name: \"Washington, D.C.\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"38.89511\", longitude: \"-77.03637\", altitude: \"125\" }, City { name: \"New York\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"40.730610\", longitude: \"-73.935242\", altitude: \"10\" }] }, \"UK\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Birmingham\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"52.4862\", longitude: \"-1.8904\", altitude: \"150\" }] }, \"CA\": Details { flag: \"🇨🇦\", calling_code: \"1\", name: \"Canada\", currency: \"CAD\", capital: \"Ottawa\", cities: [City { name: \"Ottawa\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"45.4215\", longitude: \"-75.6972\", altitude: \"70\" }, City { name: \"Toronto\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"43.65107\", longitude: \"-79.347015\", altitude: \"76.5\" }] }}\nAfter Inserting FR: {\"DZ\": Details { flag: \"🇩🇿\", calling_code: \"213\", name: \"Algeria\", currency: \"DZD\", capital: \"Algiers\", cities: [City { name: \"Algiers\", gmt: [\"GMT+1\"], latitude: \"36.737232\", longitude: \"3.086472\", altitude: \"424\" }, City { name: \"Oran\", gmt: [\"GMT+1\"], latitude: \"35.69694440\", longitude: \"0.63305560\", altitude: \"0.9\" }] }, \"GB\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Manchester\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"53.4808\", longitude: \"-2.2426\", altitude: \"38\" }] }, \"SD\": Details { flag: \"🇸🇩\", calling_code: \"249\", name: \"Sudan\", currency: \"SDG\", capital: \"Khartoum\", cities: [City { name: \"Khartoum\", gmt: [\"GMT+2\"], latitude: \"15.5007\", longitude: \"32.5599\", altitude: \"385\" }, City { name: \"Omdurman\", gmt: [\"GMT+2\"], latitude: \"15.6866\", longitude: \"32.4752\", altitude: \"375\" }, City { name: \"Khartoum Bahri\", gmt: [\"GMT+2\"], latitude: \"15.6151\", longitude: \"32.552\", altitude: \"360\" }] }, \"SA\": Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }] }, \"BH\": Details { flag: \"🇧🇭\", calling_code: \"973\", name: \"Bahrain\", currency: \"BHD\", capital: \"Manama\", cities: [City { name: \"Manama\", gmt: [\"GMT+3\"], latitude: \"26.22787\", longitude: \"50.58565\", altitude: \"10\" }, City { name: \"Riffa\", gmt: [\"GMT+3\"], latitude: \"26.129999\", longitude: \"50.555000\", altitude: \"15\" }] }, \"FR\": Details { flag: \"🇫🇷\", calling_code: \"33\", name: \"France\", currency: \"EUR\", capital: \"Paris\", cities: [City { name: \"Paris\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.8566\", longitude: \"2.3522\", altitude: \"35\" }, City { name: \"Lyon\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.763420\", longitude: \"4.834277\", altitude: \"105\" }] }, \"US\": Details { flag: \"🇺🇸\", calling_code: \"1\", name: \"United States\", currency: \"USD\", capital: \"Washington, D.C.\", cities: [City { name: \"Washington, D.C.\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"38.89511\", longitude: \"-77.03637\", altitude: \"125\" }, City { name: \"New York\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"40.730610\", longitude: \"-73.935242\", altitude: \"10\" }] }, \"UK\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Birmingham\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"52.4862\", longitude: \"-1.8904\", altitude: \"150\" }] }, \"CA\": Details { flag: \"🇨🇦\", calling_code: \"1\", name: \"Canada\", currency: \"CAD\", capital: \"Ottawa\", cities: [City { name: \"Ottawa\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"45.4215\", longitude: \"-75.6972\", altitude: \"70\" }, City { name: \"Toronto\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"43.65107\", longitude: \"-79.347015\", altitude: \"76.5\" }] }}\nAfter Inserting IT, DE and FR: {\"DZ\": Details { flag: \"🇩🇿\", calling_code: \"213\", name: \"Algeria\", currency: \"DZD\", capital: \"Algiers\", cities: [City { name: \"Algiers\", gmt: [\"GMT+1\"], latitude: \"36.737232\", longitude: \"3.086472\", altitude: \"424\" }, City { name: \"Oran\", gmt: [\"GMT+1\"], latitude: \"35.69694440\", longitude: \"0.63305560\", altitude: \"0.9\" }] }, \"GB\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Manchester\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"53.4808\", longitude: \"-2.2426\", altitude: \"38\" }] }, \"SD\": Details { flag: \"🇸🇩\", calling_code: \"249\", name: \"Sudan\", currency: \"SDG\", capital: \"Khartoum\", cities: [City { name: \"Khartoum\", gmt: [\"GMT+2\"], latitude: \"15.5007\", longitude: \"32.5599\", altitude: \"385\" }, City { name: \"Omdurman\", gmt: [\"GMT+2\"], latitude: \"15.6866\", longitude: \"32.4752\", altitude: \"375\" }, City { name: \"Khartoum Bahri\", gmt: [\"GMT+2\"], latitude: \"15.6151\", longitude: \"32.552\", altitude: \"360\" }] }, \"SA\": Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }] }, \"BH\": Details { flag: \"🇧🇭\", calling_code: \"973\", name: \"Bahrain\", currency: \"BHD\", capital: \"Manama\", cities: [City { name: \"Manama\", gmt: [\"GMT+3\"], latitude: \"26.22787\", longitude: \"50.58565\", altitude: \"10\" }, City { name: \"Riffa\", gmt: [\"GMT+3\"], latitude: \"26.129999\", longitude: \"50.555000\", altitude: \"15\" }] }, \"FR\": Details { flag: \"🇫🇷\", calling_code: \"33\", name: \"France\", currency: \"EUR\", capital: \"Paris\", cities: [City { name: \"Paris\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.8566\", longitude: \"2.3522\", altitude: \"35\" }, City { name: \"Lyon\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.763420\", longitude: \"4.834277\", altitude: \"105\" }] }, \"IT\": Details { flag: \"🇮🇹\", calling_code: \"39\", name: \"Italy\", currency: \"EUR\", capital: \"Rome\", cities: [City { name: \"Rome\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"41.9028\", longitude: \"12.49637\", altitude: \"21\" }, City { name: \"Milan\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.464664\", longitude: \"9.188540\", altitude: \"122\" }] }, \"DE\": Details { flag: \"🇩🇪\", calling_code: \"49\", name: \"Germany\", currency: \"EUR\", capital: \"Berlin\", cities: [City { name: \"Berlin\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"52.520008\", longitude: \"13.404954\", altitude: \"34\" }, City { name: \"Munich\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.137154\", longitude: \"11.576124\", altitude: \"520\" }] }, \"US\": Details { flag: \"🇺🇸\", calling_code: \"1\", name: \"United States\", currency: \"USD\", capital: \"Washington, D.C.\", cities: [City { name: \"Washington, D.C.\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"38.89511\", longitude: \"-77.03637\", altitude: \"125\" }, City { name: \"New York\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"40.730610\", longitude: \"-73.935242\", altitude: \"10\" }] }, \"UK\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Birmingham\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"52.4862\", longitude: \"-1.8904\", altitude: \"150\" }] }, \"CA\": Details { flag: \"🇨🇦\", calling_code: \"1\", name: \"Canada\", currency: \"CAD\", capital: \"Ottawa\", cities: [City { name: \"Ottawa\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"45.4215\", longitude: \"-75.6972\", altitude: \"70\" }, City { name: \"Toronto\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"43.65107\", longitude: \"-79.347015\", altitude: \"76.5\" }] }}\nCountries Sorted Ascending: [Details { flag: \"🇩🇿\", calling_code: \"213\", name: \"Algeria\", currency: \"DZD\", capital: \"Algiers\", cities: [City { name: \"Algiers\", gmt: [\"GMT+1\"], latitude: \"36.737232\", longitude: \"3.086472\", altitude: \"424\" }, City { name: \"Oran\", gmt: [\"GMT+1\"], latitude: \"35.69694440\", longitude: \"0.63305560\", altitude: \"0.9\" }] }, Details { flag: \"🇧🇭\", calling_code: \"973\", name: \"Bahrain\", currency: \"BHD\", capital: \"Manama\", cities: [City { name: \"Manama\", gmt: [\"GMT+3\"], latitude: \"26.22787\", longitude: \"50.58565\", altitude: \"10\" }, City { name: \"Riffa\", gmt: [\"GMT+3\"], latitude: \"26.129999\", longitude: \"50.555000\", altitude: \"15\" }] }, Details { flag: \"🇨🇦\", calling_code: \"1\", name: \"Canada\", currency: \"CAD\", capital: \"Ottawa\", cities: [City { name: \"Ottawa\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"45.4215\", longitude: \"-75.6972\", altitude: \"70\" }, City { name: \"Toronto\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"43.65107\", longitude: \"-79.347015\", altitude: \"76.5\" }] }, Details { flag: \"🇫🇷\", calling_code: \"33\", name: \"France\", currency: \"EUR\", capital: \"Paris\", cities: [City { name: \"Paris\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.8566\", longitude: \"2.3522\", altitude: \"35\" }, City { name: \"Lyon\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.763420\", longitude: \"4.834277\", altitude: \"105\" }] }, Details { flag: \"🇩🇪\", calling_code: \"49\", name: \"Germany\", currency: \"EUR\", capital: \"Berlin\", cities: [City { name: \"Berlin\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"52.520008\", longitude: \"13.404954\", altitude: \"34\" }, City { name: \"Munich\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.137154\", longitude: \"11.576124\", altitude: \"520\" }] }, Details { flag: \"🇮🇹\", calling_code: \"39\", name: \"Italy\", currency: \"EUR\", capital: \"Rome\", cities: [City { name: \"Rome\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"41.9028\", longitude: \"12.49637\", altitude: \"21\" }, City { name: \"Milan\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.464664\", longitude: \"9.188540\", altitude: \"122\" }] }, Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }] }, Details { flag: \"🇸🇩\", calling_code: \"249\", name: \"Sudan\", currency: \"SDG\", capital: \"Khartoum\", cities: [City { name: \"Khartoum\", gmt: [\"GMT+2\"], latitude: \"15.5007\", longitude: \"32.5599\", altitude: \"385\" }, City { name: \"Omdurman\", gmt: [\"GMT+2\"], latitude: \"15.6866\", longitude: \"32.4752\", altitude: \"375\" }, City { name: \"Khartoum Bahri\", gmt: [\"GMT+2\"], latitude: \"15.6151\", longitude: \"32.552\", altitude: \"360\" }] }, Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Manchester\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"53.4808\", longitude: \"-2.2426\", altitude: \"38\" }] }, Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Birmingham\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"52.4862\", longitude: \"-1.8904\", altitude: \"150\" }] }, Details { flag: \"🇺🇸\", calling_code: \"1\", name: \"United States\", currency: \"USD\", capital: \"Washington, D.C.\", cities: [City { name: \"Washington, D.C.\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"38.89511\", longitude: \"-77.03637\", altitude: \"125\" }, City { name: \"New York\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"40.730610\", longitude: \"-73.935242\", altitude: \"10\" }] }]\nCountries Sorted Descending: [Details { flag: \"🇺🇸\", calling_code: \"1\", name: \"United States\", currency: \"USD\", capital: \"Washington, D.C.\", cities: [City { name: \"Washington, D.C.\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"38.89511\", longitude: \"-77.03637\", altitude: \"125\" }, City { name: \"New York\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"40.730610\", longitude: \"-73.935242\", altitude: \"10\" }] }, Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Manchester\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"53.4808\", longitude: \"-2.2426\", altitude: \"38\" }] }, Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Birmingham\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"52.4862\", longitude: \"-1.8904\", altitude: \"150\" }] }, Details { flag: \"🇸🇩\", calling_code: \"249\", name: \"Sudan\", currency: \"SDG\", capital: \"Khartoum\", cities: [City { name: \"Khartoum\", gmt: [\"GMT+2\"], latitude: \"15.5007\", longitude: \"32.5599\", altitude: \"385\" }, City { name: \"Omdurman\", gmt: [\"GMT+2\"], latitude: \"15.6866\", longitude: \"32.4752\", altitude: \"375\" }, City { name: \"Khartoum Bahri\", gmt: [\"GMT+2\"], latitude: \"15.6151\", longitude: \"32.552\", altitude: \"360\" }] }, Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }] }, Details { flag: \"🇮🇹\", calling_code: \"39\", name: \"Italy\", currency: \"EUR\", capital: \"Rome\", cities: [City { name: \"Rome\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"41.9028\", longitude: \"12.49637\", altitude: \"21\" }, City { name: \"Milan\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.464664\", longitude: \"9.188540\", altitude: \"122\" }] }, Details { flag: \"🇩🇪\", calling_code: \"49\", name: \"Germany\", currency: \"EUR\", capital: \"Berlin\", cities: [City { name: \"Berlin\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"52.520008\", longitude: \"13.404954\", altitude: \"34\" }, City { name: \"Munich\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.137154\", longitude: \"11.576124\", altitude: \"520\" }] }, Details { flag: \"🇫🇷\", calling_code: \"33\", name: \"France\", currency: \"EUR\", capital: \"Paris\", cities: [City { name: \"Paris\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.8566\", longitude: \"2.3522\", altitude: \"35\" }, City { name: \"Lyon\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.763420\", longitude: \"4.834277\", altitude: \"105\" }] }, Details { flag: \"🇨🇦\", calling_code: \"1\", name: \"Canada\", currency: \"CAD\", capital: \"Ottawa\", cities: [City { name: \"Ottawa\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"45.4215\", longitude: \"-75.6972\", altitude: \"70\" }, City { name: \"Toronto\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"43.65107\", longitude: \"-79.347015\", altitude: \"76.5\" }] }, Details { flag: \"🇧🇭\", calling_code: \"973\", name: \"Bahrain\", currency: \"BHD\", capital: \"Manama\", cities: [City { name: \"Manama\", gmt: [\"GMT+3\"], latitude: \"26.22787\", longitude: \"50.58565\", altitude: \"10\" }, City { name: \"Riffa\", gmt: [\"GMT+3\"], latitude: \"26.129999\", longitude: \"50.555000\", altitude: \"15\" }] }, Details { flag: \"🇩🇿\", calling_code: \"213\", name: \"Algeria\", currency: \"DZD\", capital: \"Algiers\", cities: [City { name: \"Algiers\", gmt: [\"GMT+1\"], latitude: \"36.737232\", longitude: \"3.086472\", altitude: \"424\" }, City { name: \"Oran\", gmt: [\"GMT+1\"], latitude: \"35.69694440\", longitude: \"0.63305560\", altitude: \"0.9\" }] }]\nCountry Name: Sudan\nFlag: 🇸🇩\nCalling Code: 249\nCapital: Khartoum\nCities: [{ \"name\": \"Khartoum\", \"gmt\": [\"GMT+2\"], \"latitude\": \"15.5007\", \"longitude\": \"32.5599\", \"altitude\": \"385\" }, { \"name\": \"Omdurman\", \"gmt\": [\"GMT+2\"], \"latitude\": \"15.6866\", \"longitude\": \"32.4752\", \"altitude\": \"375\" }, { \"name\": \"Khartoum Bahri\", \"gmt\": [\"GMT+2\"], \"latitude\": \"15.6151\", \"longitude\": \"32.552\", \"altitude\": \"360\" }]\nOmdurman Details: { \"name\": \"Omdurman\", \"gmt\": [\"GMT+2\"], \"latitude\": \"15.6866\", \"longitude\": \"32.4752\", \"altitude\": \"375\" }\nKhartoum GMT: GMT+2\nOmdurman Altitude: 375\nKhartoum Bahri Altitude: 360\nUpdated details (1) for Saudi Arabia: Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }, City { name: \"Dammam\", gmt: [\"GMT+3\"], latitude: \"26.4201\", longitude: \"50.0888\", altitude: \"5\" }] }\nUpdated details (2) for Saudi Arabia: Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }, City { name: \"Dammam\", gmt: [\"GMT+3\"], latitude: \"26.4201\", longitude: \"50.0888\", altitude: \"6\" }, City { name: \"Khobar\", gmt: [\"GMT+3\"], latitude: \"26.3040\", longitude: \"50.1998\", altitude: \"15\" }] }\nCurrent Countries: {\"DZ\": Details { flag: \"🇩🇿\", calling_code: \"213\", name: \"Algeria\", currency: \"DZD\", capital: \"Algiers\", cities: [City { name: \"Algiers\", gmt: [\"GMT+1\"], latitude: \"36.737232\", longitude: \"3.086472\", altitude: \"424\" }, City { name: \"Oran\", gmt: [\"GMT+1\"], latitude: \"35.69694440\", longitude: \"0.63305560\", altitude: \"0.9\" }] }, \"GB\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Manchester\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"53.4808\", longitude: \"-2.2426\", altitude: \"38\" }] }, \"SD\": Details { flag: \"🇸🇩\", calling_code: \"249\", name: \"Sudan\", currency: \"SDG\", capital: \"Khartoum\", cities: [City { name: \"Khartoum\", gmt: [\"GMT+2\"], latitude: \"15.5007\", longitude: \"32.5599\", altitude: \"385\" }, City { name: \"Omdurman\", gmt: [\"GMT+2\"], latitude: \"15.6866\", longitude: \"32.4752\", altitude: \"375\" }, City { name: \"Khartoum Bahri\", gmt: [\"GMT+2\"], latitude: \"15.6151\", longitude: \"32.552\", altitude: \"360\" }] }, \"SA\": Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }, City { name: \"Dammam\", gmt: [\"GMT+3\"], latitude: \"26.4201\", longitude: \"50.0888\", altitude: \"6\" }, City { name: \"Khobar\", gmt: [\"GMT+3\"], latitude: \"26.3040\", longitude: \"50.1998\", altitude: \"15\" }] }, \"BH\": Details { flag: \"🇧🇭\", calling_code: \"973\", name: \"Bahrain\", currency: \"BHD\", capital: \"Manama\", cities: [City { name: \"Manama\", gmt: [\"GMT+3\"], latitude: \"26.22787\", longitude: \"50.58565\", altitude: \"10\" }, City { name: \"Riffa\", gmt: [\"GMT+3\"], latitude: \"26.129999\", longitude: \"50.555000\", altitude: \"15\" }] }, \"FR\": Details { flag: \"🇫🇷\", calling_code: \"33\", name: \"France\", currency: \"EUR\", capital: \"Paris\", cities: [City { name: \"Paris\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.8566\", longitude: \"2.3522\", altitude: \"35\" }, City { name: \"Lyon\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.763420\", longitude: \"4.834277\", altitude: \"105\" }] }, \"IT\": Details { flag: \"🇮🇹\", calling_code: \"39\", name: \"Italy\", currency: \"EUR\", capital: \"Rome\", cities: [City { name: \"Rome\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"41.9028\", longitude: \"12.49637\", altitude: \"21\" }, City { name: \"Milan\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.464664\", longitude: \"9.188540\", altitude: \"122\" }] }, \"DE\": Details { flag: \"🇩🇪\", calling_code: \"49\", name: \"Germany\", currency: \"EUR\", capital: \"Berlin\", cities: [City { name: \"Berlin\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"52.520008\", longitude: \"13.404954\", altitude: \"34\" }, City { name: \"Munich\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.137154\", longitude: \"11.576124\", altitude: \"520\" }] }, \"US\": Details { flag: \"🇺🇸\", calling_code: \"1\", name: \"United States\", currency: \"USD\", capital: \"Washington, D.C.\", cities: [City { name: \"Washington, D.C.\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"38.89511\", longitude: \"-77.03637\", altitude: \"125\" }, City { name: \"New York\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"40.730610\", longitude: \"-73.935242\", altitude: \"10\" }] }, \"UK\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Birmingham\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"52.4862\", longitude: \"-1.8904\", altitude: \"150\" }] }, \"CA\": Details { flag: \"🇨🇦\", calling_code: \"1\", name: \"Canada\", currency: \"CAD\", capital: \"Ottawa\", cities: [City { name: \"Ottawa\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"45.4215\", longitude: \"-75.6972\", altitude: \"70\" }, City { name: \"Toronto\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"43.65107\", longitude: \"-79.347015\", altitude: \"76.5\" }] }}\nInvalid Country Details: { \"flag\": \"\", \"calling_code\": \"\", \"name\": \"\", \"capital\": \"\", \"currency\": \"\", \"cities\": [] }\nCities after deleting Dammam: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }, City { name: \"Jeddah\", gmt: [\"GMT+3\"], latitude: \"21.2854\", longitude: \"39.2376\", altitude: \"12\" }, City { name: \"Khobar\", gmt: [\"GMT+3\"], latitude: \"26.3040\", longitude: \"50.1998\", altitude: \"15\" }]\nCities after deleting Khobar and Jeddah: [City { name: \"Riyadh\", gmt: [\"GMT+3\"], latitude: \"24.7136\", longitude: \"46.6753\", altitude: \"612\" }]\nCities after deleting all cities: []\nAfter Deleting FR: {\"DZ\": Details { flag: \"🇩🇿\", calling_code: \"213\", name: \"Algeria\", currency: \"DZD\", capital: \"Algiers\", cities: [City { name: \"Algiers\", gmt: [\"GMT+1\"], latitude: \"36.737232\", longitude: \"3.086472\", altitude: \"424\" }, City { name: \"Oran\", gmt: [\"GMT+1\"], latitude: \"35.69694440\", longitude: \"0.63305560\", altitude: \"0.9\" }] }, \"GB\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Manchester\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"53.4808\", longitude: \"-2.2426\", altitude: \"38\" }] }, \"SD\": Details { flag: \"🇸🇩\", calling_code: \"249\", name: \"Sudan\", currency: \"SDG\", capital: \"Khartoum\", cities: [City { name: \"Khartoum\", gmt: [\"GMT+2\"], latitude: \"15.5007\", longitude: \"32.5599\", altitude: \"385\" }, City { name: \"Omdurman\", gmt: [\"GMT+2\"], latitude: \"15.6866\", longitude: \"32.4752\", altitude: \"375\" }, City { name: \"Khartoum Bahri\", gmt: [\"GMT+2\"], latitude: \"15.6151\", longitude: \"32.552\", altitude: \"360\" }] }, \"SA\": Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [] }, \"BH\": Details { flag: \"🇧🇭\", calling_code: \"973\", name: \"Bahrain\", currency: \"BHD\", capital: \"Manama\", cities: [City { name: \"Manama\", gmt: [\"GMT+3\"], latitude: \"26.22787\", longitude: \"50.58565\", altitude: \"10\" }, City { name: \"Riffa\", gmt: [\"GMT+3\"], latitude: \"26.129999\", longitude: \"50.555000\", altitude: \"15\" }] }, \"IT\": Details { flag: \"🇮🇹\", calling_code: \"39\", name: \"Italy\", currency: \"EUR\", capital: \"Rome\", cities: [City { name: \"Rome\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"41.9028\", longitude: \"12.49637\", altitude: \"21\" }, City { name: \"Milan\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"45.464664\", longitude: \"9.188540\", altitude: \"122\" }] }, \"DE\": Details { flag: \"🇩🇪\", calling_code: \"49\", name: \"Germany\", currency: \"EUR\", capital: \"Berlin\", cities: [City { name: \"Berlin\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"52.520008\", longitude: \"13.404954\", altitude: \"34\" }, City { name: \"Munich\", gmt: [\"GMT+1\", \"GMT+2\"], latitude: \"48.137154\", longitude: \"11.576124\", altitude: \"520\" }] }, \"US\": Details { flag: \"🇺🇸\", calling_code: \"1\", name: \"United States\", currency: \"USD\", capital: \"Washington, D.C.\", cities: [City { name: \"Washington, D.C.\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"38.89511\", longitude: \"-77.03637\", altitude: \"125\" }, City { name: \"New York\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"40.730610\", longitude: \"-73.935242\", altitude: \"10\" }] }, \"UK\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Birmingham\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"52.4862\", longitude: \"-1.8904\", altitude: \"150\" }] }, \"CA\": Details { flag: \"🇨🇦\", calling_code: \"1\", name: \"Canada\", currency: \"CAD\", capital: \"Ottawa\", cities: [City { name: \"Ottawa\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"45.4215\", longitude: \"-75.6972\", altitude: \"70\" }, City { name: \"Toronto\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"43.65107\", longitude: \"-79.347015\", altitude: \"76.5\" }] }}\nAfter Deleting IT and DE: {\"DZ\": Details { flag: \"🇩🇿\", calling_code: \"213\", name: \"Algeria\", currency: \"DZD\", capital: \"Algiers\", cities: [City { name: \"Algiers\", gmt: [\"GMT+1\"], latitude: \"36.737232\", longitude: \"3.086472\", altitude: \"424\" }, City { name: \"Oran\", gmt: [\"GMT+1\"], latitude: \"35.69694440\", longitude: \"0.63305560\", altitude: \"0.9\" }] }, \"GB\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Manchester\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"53.4808\", longitude: \"-2.2426\", altitude: \"38\" }] }, \"SD\": Details { flag: \"🇸🇩\", calling_code: \"249\", name: \"Sudan\", currency: \"SDG\", capital: \"Khartoum\", cities: [City { name: \"Khartoum\", gmt: [\"GMT+2\"], latitude: \"15.5007\", longitude: \"32.5599\", altitude: \"385\" }, City { name: \"Omdurman\", gmt: [\"GMT+2\"], latitude: \"15.6866\", longitude: \"32.4752\", altitude: \"375\" }, City { name: \"Khartoum Bahri\", gmt: [\"GMT+2\"], latitude: \"15.6151\", longitude: \"32.552\", altitude: \"360\" }] }, \"SA\": Details { flag: \"🇸🇦\", calling_code: \"966\", name: \"Saudi Arabia\", currency: \"SAR\", capital: \"Riyadh\", cities: [] }, \"BH\": Details { flag: \"🇧🇭\", calling_code: \"973\", name: \"Bahrain\", currency: \"BHD\", capital: \"Manama\", cities: [City { name: \"Manama\", gmt: [\"GMT+3\"], latitude: \"26.22787\", longitude: \"50.58565\", altitude: \"10\" }, City { name: \"Riffa\", gmt: [\"GMT+3\"], latitude: \"26.129999\", longitude: \"50.555000\", altitude: \"15\" }] }, \"US\": Details { flag: \"🇺🇸\", calling_code: \"1\", name: \"United States\", currency: \"USD\", capital: \"Washington, D.C.\", cities: [City { name: \"Washington, D.C.\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"38.89511\", longitude: \"-77.03637\", altitude: \"125\" }, City { name: \"New York\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"40.730610\", longitude: \"-73.935242\", altitude: \"10\" }] }, \"UK\": Details { flag: \"🇬🇧\", calling_code: \"44\", name: \"United Kingdom\", currency: \"GBP\", capital: \"London\", cities: [City { name: \"London\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"51.509865\", longitude: \"-0.118092\", altitude: \"24\" }, City { name: \"Birmingham\", gmt: [\"GMT+0\", \"GMT+1\"], latitude: \"52.4862\", longitude: \"-1.8904\", altitude: \"150\" }] }, \"CA\": Details { flag: \"🇨🇦\", calling_code: \"1\", name: \"Canada\", currency: \"CAD\", capital: \"Ottawa\", cities: [City { name: \"Ottawa\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"45.4215\", longitude: \"-75.6972\", altitude: \"70\" }, City { name: \"Toronto\", gmt: [\"GMT-5\", \"GMT-4\"], latitude: \"43.65107\", longitude: \"-79.347015\", altitude: \"76.5\" }] }}\nAfter Deleting All: {}\n```\n\n## Documentation\n\nFor a detailed API reference, visit the [CANS Documentation](https://docs.rs/cans/latest/cans).\n\n## Contributing\n\nContributions are welcome! If you have suggestions or improvements, feel free to submit an issue or a pull request.\n\n## License\n\nThis project is licensed under the MIT or Apache 2.0 License - see the LICENSE file for details.\n\n## Conclusion\n\nWhether you're building a small project or a large application, CANS provides the tools you need to create dynamic and flexible templates with ease. Unlock the potential of CANS to elevate your Rust web development experience!\n\n## Donations\n\nIf you appreciate the work on CANS and would like to support its development, you can make a donation using USDT (TRC-20). Your contributions will help us continue to improve the project and maintain its features.\n\n**Donate with USDT (TRC-20)**\n\n- Wallet Address: [`TFtKw3aExk5fXvdmTobiVDBbkbJB66wc6D`](https://tronscan.org/#/address/TFtKw3aExk5fXvdmTobiVDBbkbJB66wc6D)\n\n**Donate with USDC (TRC-20)**\n\n- Wallet Address: [`TFtKw3aExk5fXvdmTobiVDBbkbJB66wc6D`](https://tronscan.org/#/address/TFtKw3aExk5fXvdmTobiVDBbkbJB66wc6D)\n\n**Donate with TRON (TRX)**\n\n- Wallet Address: [`TFtKw3aExk5fXvdmTobiVDBbkbJB66wc6D`](https://tronscan.org/#/address/TFtKw3aExk5fXvdmTobiVDBbkbJB66wc6D)\n\nThank you for your support!\n\n---\n\n## Author\n\n[Dr. Montasir Mirghani](https://github.com/dr-montasir)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdr-montasir%2Fcans","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdr-montasir%2Fcans","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdr-montasir%2Fcans/lists"}