{"id":19190710,"url":"https://github.com/a4-tacks/rust-set-derive","last_synced_at":"2026-05-17T11:34:53.776Z","repository":{"id":143135524,"uuid":"614843999","full_name":"A4-Tacks/rust-set-derive","owner":"A4-Tacks","description":"Using macro to implement the comprehensions of imitating python language in rust","archived":false,"fork":false,"pushed_at":"2024-01-09T08:23:05.000Z","size":17,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-22T19:46:30.033Z","etag":null,"topics":["list-comprehension","macros","python","python3","rust","rust-crate","rust-lang","rust-macro","rust-macros"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/A4-Tacks.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2023-03-16T12:43:30.000Z","updated_at":"2024-11-26T15:47:04.000Z","dependencies_parsed_at":"2024-01-09T08:25:50.725Z","dependency_job_id":"4189e20d-62b8-4dd2-ad5d-31913b2d615a","html_url":"https://github.com/A4-Tacks/rust-set-derive","commit_stats":null,"previous_names":[],"tags_count":5,"template":false,"template_full_name":null,"purl":"pkg:github/A4-Tacks/rust-set-derive","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A4-Tacks%2Frust-set-derive","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A4-Tacks%2Frust-set-derive/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A4-Tacks%2Frust-set-derive/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A4-Tacks%2Frust-set-derive/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/A4-Tacks","download_url":"https://codeload.github.com/A4-Tacks/rust-set-derive/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/A4-Tacks%2Frust-set-derive/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267327534,"owners_count":24069442,"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-07-27T02:00:11.917Z","response_time":82,"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":["list-comprehension","macros","python","python3","rust","rust-crate","rust-lang","rust-macro","rust-macros"],"created_at":"2024-11-09T11:35:30.518Z","updated_at":"2026-05-17T11:34:53.696Z","avatar_url":"https://github.com/A4-Tacks.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Using macro to implement the comprehensions of imitating python language in rust\n- You can initialize common collection types with relatively little code\n- `Vec [v]`, `HashMap {k=\u003ev}` and `HashSet !{k}` have been implemented\n\n## Vec Or HashSet Syntax\n- Ordinary element: `[foo, 1, 2i32]`\n- for each: `[*(i; for i in 0..10)]`\n- for each and filter: `[*(i; for i in 0..10; if i != 5)]`\n- for each and filter and sub for each:\n  `[*(i + j; for i in 0..10; if i != 5; for j in 1..i)]`\n\n\n## HashMap Syntax\n- Ordinary element: `{k =\u003e v, [k1]: v1}`\n- String ordinary key: `{%[key]: \"jack\"}` (`key: String`)\n- Ident key: `{name: \"jack\"}` (`name: \u0026'static str`)\n- String ident key: `{%name: \"jack\"}` (`name: String`)\n- Variable key: `{*key: \"jack\"}` (`let key = \"name\";`)\n- Literal key: `{\"name\": \"jack\"}`\n- Literal key tostring: `{%\"name\": \"jack\"}` (`name: String`)\n- for each: Just like in Vec, but slightly different.\n  e.g `{*(i =\u003e i+1; for i in 0..5)}`\n\n\n## Other\n- for each reserve: `[*[10](i; for i in 0..10)]`\n- generic params: `\u003ci64\u003e[1, 2, 3]`\n- init with capacity: `(20)[1, 2, 3]` | `\u003ci64\u003e(20)[1, 2, 3]`\n- inspect block: `[*(i; for i in 0..10; {dbg!(i);} if i \u0026 1 == 0)]`\n\n\ncrate: \u003chttps://crates.io/crates/set_derive\u003e\n\n\n# Examples\n```rust\n# use set_derive::set_derive;\n# use std::collections::HashMap;\nlet arr1 = vec![\n    0, 1, 8, 9, 10, 15, 16, 17, 18, 19,\n];\nlet arr2 = set_derive!([\n    0, 1,\n    *(i; for i in 8..=10),\n    *(i; for i in 15..20),\n]);\n// python: [0, 1, *range(8, 10+1), *range(15, 20)]\nassert_eq!(arr1, arr2);\n\nlet arr = set_derive!([*(\n    i+j;\n    for i in 0..6;\n    if i%2!=0;\n    for j in 0..i;\n)]);\n// python: [i+j for i in range(6) if i%2 for j in range(0, i)]\nassert_eq!(arr, vec![1, 3, 4, 5, 5, 6, 7, 8, 9]);\n\nlet age_key = \"age\";\nlet jack = set_derive!({\n    name: \"jack\",\n    *age_key: \"20\",\n});\nassert_eq!(jack, HashMap::from([(\"name\", \"jack\"), (\"age\", \"20\")]));\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fa4-tacks%2Frust-set-derive","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fa4-tacks%2Frust-set-derive","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fa4-tacks%2Frust-set-derive/lists"}